Поиск отдельных слов с помощью Solr - PullRequest
7 голосов
/ 08 октября 2011

Я пытаюсь найти частичное слово с помощью Solr, но не могу заставить его работать.

Я использую это в моем schema.xml файле.

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
       <filter class="solr.StandardFilterFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
       <filter class="solr.PorterStemFilterFactory"/>
       <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
  </analyzer>
</fieldType>

Поиск die h не будет работать, но die hard возвращает некоторые результаты.После добавления вышеуказанной конфигурации я переиндексировал базу данных.

Здесь - это URL-адрес и выходные данные при поиске die hard.Отладчик включен.

Здесь - это URL и вывод при поиске die h.Отладчик включен.

Я использую Solr 3.3. Здесь - остаток файла schema.xml.

1 Ответ

6 голосов
/ 08 октября 2011

Запрос, которым вы поделились, ищет в поле "title_text", но схема, которую вы разместили выше, определяет поле "текст" Предполагая, что это просто недосмотр, а поле title_text определено так же, как в вашем сообщении, я думаю, что вероятной проблемой является то, что NGramTokenizer настроен с minGramSize = "3", и вы ожидаете совпадения с использованием односимвольного токена.

Вы можете попробовать изменить minGramSize на 1, но это неизбежно приведет к некоторым очень неэффективным индексам; и мне интересно, действительно ли вы хотите, чтобы «е» соответствовало каждому фильму с «е» в названии?

...