2015-02-16 2 views
3

У меня есть локальный кластер Solr облако работает на трех отдельных узлов: 33.33.3[3-5]:8080 Этот кластер под управлением локального 3 узла Zookeeper ансамблем, который живет по адресу: 33.33.3[0-2]:2181Существующая коллекция SOLR не подбирая Zookeeper изменения схемы

Я пытаюсь экспериментировать с модификациями схемы - однако у меня возникают проблемы с получением SOLR для ввода новых изменений. Вот то, что я делаю

Сначала я загрузить один набор конфигурации для Zookeeper:

/opt/src/solr/scripts/cloud-scripts/zkcli.sh -zkhost 33.33.33.30:2181,33.33.33.31:2181,33.33.33.32:2181 -cmd upconfig -confdir /opt/src/solr/solr/conf/ -confname test_conf 

Затем я создаю коллекцию в ГУМЗ:

http://33.33.33.33:8080/solr/admin/collections?action=CREATE&name=test_collection&numShards=1&replicationFactor=3 

Это все работает отлично. Поскольку в zookeeper имеется только одна конфигурация, она автоматически сопоставляется с коллекцией при создании. Довольно круто.

Теперь я хочу изменить схему для test_collection. Итак, я ssh в один из моих ящиков SOLR, перейдите на /opt/src/solr/solr/conf/, откройте schema.xml в vim и удалите поле. Затем я загрузить конфиг снова (с тем же именем, так что перезаписывает старый конфиг):

/opt/src/solr/scripts/cloud-scripts/zkcli.sh -zkhost 33.33.33.30:2181,33.33.33.31:2181,33.33.33.32:2181 -cmd upconfig -confdir /opt/src/solr/solr/conf/ -confname test_conf 

Сейчас я перезагружать ядро:

http://33.33.33.33:8080/solr/admin/collections?action=RELOAD&name=test_collection 

И Zookeeper поднимает изменения. Я могу загрузить файл из zookeeper и изменения там. Я могу просматривать конфигурацию в SOLR admin (cloud>tree>configs>schema.xml AND test_collection>files>schema.xml), и изменения отражаются. Однако, если я ударил по этому маршруту: http://33.33.33.33:8080/solr/test_collection/schema/fields поле все еще там. Кроме того, если я перейду к test_collection>schema browser в администратор SOLR, поле по-прежнему будет там указано.

Что здесь происходит?

EDIT:

Если я смотрю на журналы в Solr администратора я вижу следующее, которые должны быть связаны ...

2/23/2015, 3:06:46 PM 
WARN 
OverseerCollectionProcessor 
OverseerCollectionProcessor.processMessage : reloadcollection ,​ { 
2/23/2015, 3:06:46 PM 
WARN 
ManagedIndexSchemaFactory 
The schema has been upgraded to managed,​ but the non-managed schema schema.xml is still loadable. PLEASE REMOVE THIS FILE. 
2/23/2015, 3:06:46 PM 
WARN 
RequestHandlers 
Multiple requestHandler registered to the same name: /update/json ignoring: org.apache.solr.handler.UpdateRequestHandler 
2/23/2015, 3:06:46 PM 
WARN 
RequestHandlers 
Multiple requestHandler registered to the same name: /update ignoring: org.apache.solr.handler.UpdateRequestHandler 
2/23/2015, 3:06:46 PM 
WARN 
RequestHandlers 
Multiple requestHandler registered to the same name: /replication ignoring: org.apache.solr.handler.ReplicationHandler 
+0

Какой ответ вы получаете при запросе '.../collections? Action = RELOAD'? – EricLavault

+0

Является ли запрос выше успешным? Что произойдет, если вы перезагрузите ** ядра ** вместо '.../admin/corees action = RELOAD & core = ...'? – EricLavault

+0

@ n0tting я получаю следующий ответ: 0 418 0 343 0 351 tknickman

ответ

3

В конце концов я понял это, проведя так много времени с SOLR за последние несколько месяцев.

Давайте разложим проблему, которую я видел.

Я загрузил конфигурацию в zookeeper, создав коллекцию в solr и связав их вместе. Затем я бы изменил схему - загрузите ее снова, перезагрузите ядро ​​solr - и ничего не произойдет!

Это было, по сути, ошибка пользователя и непонимание одной основной функции.

Я использовал управляемую схему в пределах SOLR. Это означает, что я мог бы использовать API-интерфейс схемы в более новых версиях SOLR. Для всех, кому это интересно - при использовании управляемой схемы - SOLR на самом деле делает копию вашей схемы, которую она редактирует, - и ЭТО, где происходят изменения. Не к вашей исходной схеме (которая все еще выставлена ​​на http://33.33.33.33:8080/solr/test_collection/schema/fields).

Если вы хотите, чтобы ваши последние изменения вступили в силу. Взгляните на файл managed-schema в папке конфигурации в zookeeper.

Спасибо всем за помощь.

+0

Не могли бы вы конкретно указать, что значит« использовать API-интерфейс схемы »для« перезагрузки »схемы? ! – kellyfj

+0

На самом деле я сам это понял. Https://cwiki.apache.org/confluence/display/solr/Schema+API#SchemaAPI-APIEntryPoints Просто нужно использовать конечную точку API-интерфейса REST API «addFields» – kellyfj

1

Я думаю, что вам не хватает шаг linkconfig, связывающая конфигурация установлена ​​в коллекцию.

Так в самом начале, после upconfig, и перед созданием коллекции, вам нужно сделать linkconfig как следующее:

/opt/src/solr/scripts/cloud-scripts/zkcli.sh -zkhost 33.33.33.30:2181,33.33.33.31:2181,33.33.33.32:2181 -cmd linkconfig -collection test_collection -confname test_conf 

И после того, что для обновления конфигурации, вы не должны делать linkconfig опять же, достаточно только выполнить upconfig, а затем перезагрузить сборку, как вы. Просто этот шаг отсутствует в начале, прежде чем создавать коллекцию.

Для полного ведения коллекции API, вы можете посмотреть здесь: https://cwiki.apache.org/confluence/display/solr/Collections+API

+0

И для справки утилиты команд, здесь: https://cwiki.apache.org/confluence/display/solr/Command+Line+Utilities – Emad

+0

Конфигурация связана с прекрасным Я загружаю только один. Если вы посмотрите в документации, то по умолчанию используется существующая конфигурация IF, если есть только одна. Если их несколько, по умолчанию используется имя коллекции. При этом я все еще пытался это сделать несколько раз, как после загрузки, так и создания коллекции. Следует отметить, что команда, которую вы отправили, предназначена для связывания коллекции EXISTING с загруженной конфигурацией. – tknickman

+0

. Она не связывает существующую коллекцию, если вы посмотрите на краткое руководство здесь: http://wiki.apache.org/solr/SolrCloudTomcat он говорит на шаге 8 перед созданием коллекции, которую вы должны связывать. И я всегда делаю linkconfig перед созданием коллекции, и обновления отлично работают для меня. Я все еще считаю, что это недостающий шаг. – Emad

0

Возможно у вас есть данные в вашем ГУМЗ «test_collection», который использует поле, которое удалено.

Попробуйте очистить пробную коллекцию.

+0

К сожалению, нет, я могу создать совершенно новую коллекцию и не индексировать данные вообще, но проблема все равно возникает. – tknickman

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