2014-10-06 2 views
0

Я экспериментирую с базой примеров в Solr 4.10 и не понимаю, как работает dynamicFields. Схема определяетSolr dynamicField не поиск в запросе без имени поля

dynamicField name="*_s" type="string" indexed="true" stored="true" 

Если добавить новый элемент с новым именем поля (скажем "example_s":"goober" в формате JSON), запрос типа

?q=goober 

возвращается не матчей, а

?q=example_s:goober 

найдет матч. Что мне не хватает?

ответ

0

Я хотел бы увидеть SearchHandler из файла solrconfig.xml, который вы используете для выполнения вышеупомянутого запроса.

В SearchHandler у нас обычно есть поле запроса по умолчанию i.e. Qf.

Проверьте, что ваше динамическое поле example_s присутствует в этом списке полей запроса файла solrconfig, который вы можете передать при отправке запроса в обработчик поиска.

Надеюсь, это поможет вам в решении вашей проблемы.

+0

Я думаю, что ваш ответ правильный, однако после обновления списка полей в параметре qf, повторного запуска Solr и переиндексации документов он все равно не будет работать. Соль, похоже, придерживается противоположного подхода к Elasticsearch; Я работал с Elasticsearch в течение нескольких минут, потому что конфигурация по умолчанию индексирует все.Конфигурация по умолчанию для Solr в основном ничего не индексирует, пока вы не скажете, что индексировать. – user3528023

0

Если вы используете схему по умолчанию, вот что происходит:

  1. Вероятно, вы используете по умолчанию конечной точки (/ выбор), так что вы получите определение типа поиска и параметров от этого. Это означает, что это поиск по умолчанию (lucene) и the field searched is text.
  2. Текстовое поле является агрегатом и заполняется copyField instruction from other fields.
  3. Ваш dynamic field definition for *_s позволяет вам индексировать текст с любым именем, заканчивающимся на _s, например example_s. Он индексируется (так что вы можете искать его напрямую) и сохраняться (чтобы вы могли видеть его, когда запрашиваете все поля). Однако он не будет рассматривать его как общий текст. Обратите внимание, что (иначе, чем ElasticSearch), строки Solr должны быть сопоставлены полностью и полностью. Если в нем есть многословный текст, в нем почти нет точки поиска. «goober» - одно слово, поэтому это не очень хороший пример, чтобы понять разницу здесь.
  4. Самое простое решение для вас - добавить еще одну команду copyField: <copyField source="*_s" dest="text"/>, тогда все ваши динамические поля * _s также будут доступны для поиска. Но обратите внимание, что поисковые анализаторы будут не быть теми, которые определяют * _s, но те for the text field's definition, который не является строкой, а text_general, определенными в другом месте в файле.

Что касается Solr vs. ElasticSearch, они оба ошибаются на разных сторонах магии. Solr позволяет вам настроить систему и очень легко увидеть точную текущую конфигурацию. ElasticSearch скрывает всю конфигурацию, но вы должны заново открыть ее, вторую, которую хотите изменить, от поведения по умолчанию. В итоге результат, вероятно, схож и встречается где-то посередине.

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