Невозможно найти более двух слов в Solr - PullRequest
1 голос
/ 13 марта 2019

Я использую apache-solr-3.4.0.Я могу искать, используя одно слово, но не могу искать, используя более одного слова.Например: jobTitle:tester производит результаты, но jobTitle:java developer не возвращает никакого результата.

В моем schema.xml я добавил следующий код для типа текстового поля:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize=  "5"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="5"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Ответы [ 2 ]

1 голос
/ 15 марта 2019

У вас есть несколько вариантов, отсортированных по простоте использования

  1. Используйте скобки ( и ) вокруг частей запроса, которые должны идти в одно поле для их группировки, например, jobTitle:(java developer). не просто заключите в кавычки ", это выполняется как запрос фразы, который является чем-то другим.
  2. Определите альтернативное поле по умолчанию, используя локальные параметры для запроса, например, {!df=jobTitle}java developer. Это заставит все части вашего запроса перейти в это поле.
  3. Укажите лучшее поле поиска по умолчанию в вашем solrconfig.xml для каждого обработчика запросов, для этого требуется перезапуск после настройки.
  4. Использовать обработчик запросов eDismax или Dismax по умолчанию, определить поля, с которыми должен идти ввод для поиска. Вы можете представить их как расширение опции (2), где у вас есть несколько полей по умолчанию. Это потребует от вас изменения вашего solrconfig.xml, но не потребует перестройки вашего индекса.
  5. Улучшите содержимое поля по умолчанию, сделайте его лучше, чтобы охватить все поля, содержащие все содержимое всех полей или, по крайней мере, все соответствующие поля. Это потребует от вас подумать о дизайне схемы, изменить schema.xml и перестроить свой индекс.

Фон
Представьте, что Solr разбивает ваш поисковый запрос на части по каждому пробелу (на самом деле это не так просто, но достаточно для начала). Каждая часть обрабатывается либо против назначенного поля или поля по умолчанию. Взято из Руководство Сольра

Поле действительно только для термина, которому оно предшествует, поэтому запрос title: Do it right найдет только «Do» в поле заголовка. Он найдет «оно» и «право» в поле по умолчанию (в данном случае в текстовом поле).

0 голосов
/ 13 марта 2019

Solr также имеет NGramFilterFactory. N-граммовый фильтр .Попробуйте не использовать токенайзер ngram.Я бы предложил использовать «WhitespaceTokenizer», а затем применить фильтры ngram.

<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="3" />

тип вашего поля должен выглядеть примерно так:

<fieldType name="text_custom" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10" />
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...