2013-03-28 1 views
2

Используя следующий запрос, когда я создаю коллекцию, я установил два осколка для collection10.Как добавить осколки динамически к коллекции в solr?

/Solr/админ/коллекции? Действие = CREATE & имя = collection10 & numShards = 2 & replicationFactor = 2

Но что мое требование, я должен добавить 3-й осколок динамически после 10000 документов были проиндексированы в первых двух осколках.

Можно ли добавить осколки динамически, как только мы начали сбор и индексирование на существующих осколках? Если это возможно, то можно добавить динамически динамически один раз после того, как мы начали сбор?

А также, можно ли добавить реплики динамически, как только мы начали сбор. Например, я установил replicationFactor=2, а затем мне нужно запустить новую репликацию для уже запущенной коллекции. Можно ли это сделать? Если да, то как это сделать?

ответ

7

Одно решение проблема заключается в использовании «неявного маршрутизатора» при создании вашей коллекции.

Solr действительно поддерживает возможность добавления новых осколков (или DELETE существующих осколков) к вашему индексу (когда захотите) через конфигурацию «неявного маршрутизатора» (CREATE COLLECTION API).

Скажем, вы должны индексировать все данные «Audit Trail» вашего приложения в Solr. Новые данные добавляются каждый день. Возможно, вы, скорее всего, захотите очертить год.

Вы могли бы сделать что-то вроде ниже при первоначальной настройке вашей коллекции:

admin/collections? 
action=CREATE& 
name=AuditTrailIndex& 
router.name=implicit& 
shards=2010,2011,2012,2013,2014& 
router.field=year 

Вышеуказанная команда: а) Создает 5 черепки - по одному за текущий и последние 4 года 2010,2011 , 2012,2013,2014 b) Направляет данные на правильный осколок в зависимости от значения поля «год» (указано как router.field)

В декабре 2014 года вы можете добавить новый осколок при подготовке к 2015 году используя API CREATESHARD (часть API коллекций) - Сделайте что-то вроде:

/admin/collections? 
action=CREATESHARD& 
shard=2015& 
collection=AuditTrailIndex 

Указанная выше команда создает новый осколок в той же коллекции.

Когда в 2015 году все данные будут автоматически проиндексированы в осколок «2015», если ваши данные имеют поле «год», правильно заполненное до 2015 года.

В 2015 году, если вы думаете, что вам не нужно осколок 2010 (в зависимости от ваших требований хранения данных) - вы всегда можете использовать DELETESHARD API, чтобы сделать так:

/admin/collections? 
action=DELETESHARD& 
shard=2015& 
collection=AuditTrailIndex 

P.S. Это решение работает, только если вы использовали «неявный роутер» при создании своей коллекции. НЕ работает, когда вы используете стандартный «составной маршрутизатор» - то есть коллекции, созданные с помощью параметра numshards.

Эта функция поистине является игровым мастером - позволяет добавлять черепах динамически на основе растущих потребностей вашего бизнеса.

Эта функция доступна в Elastic Search. Если нет, я уверен, что они успеют.

+0

Это действительно самое полезное сообщение в маршрутизации документа в единственном облаке, которое я могу найти в stackoverflow. Очень трудно найти хорошие примеры в любом месте. Большое вам спасибо за это. – absurd

Смежные вопросы