SOLR: проблемы с NGramFilterFactory - PullRequest
       35

SOLR: проблемы с NGramFilterFactory

3 голосов
/ 13 октября 2011

Я использую SOLR в качестве поисковой системы для интрасети с чуть более 40000 документов.Я сохраняю это очень просто, используя директиву copyField для копирования полей title и keywords в поле content и индексирования только этого.

С тех пор мы использовали эту конфигурацию:

<analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory" />              
    <filter class="solr.SnowballPorterFilterFactory" language="German" />
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>

Это работало довольно хорошо, но были жалобы, что подстановочный знак нужно было устанавливать вручную.Поэтому я добавил NGRamFilterFactory в качестве последней строки в анализаторе:

<analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory" />              
    <filter class="solr.SnowballPorterFilterFactory" language="German" />
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="30" />
</analyzer>

Проблема теперь заключается в следующем: со старой конфигурацией, которую я использовал для поиска 7 документов с определенным ключевым словом («Sony»).Теперь их всего 2. Я полностью очистил индекс и собрал его с нуля.Когда я снова вынимаю эту строку и переиндексирую документы, она снова работает, как и ожидалось.Это приводит меня к вопросам, которые у меня есть:

  • Является ли FilterFactory подходящей для меня вещью или это должна быть фабрика токенизаторов?А если токенизатор: может ли он работать после фильтров?
  • Я добавляю документы в формате xml траншами по 75 документов и выполняю фиксацию в самом конце.Должно ли быть больше коммитов?
  • Был еще один, который я забыл сейчас .. grr

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 13 октября 2011

Просто дикая догадка -

Каков размер (количество слов) в поле вашего контента?
Так как теперь, когда у вас есть NGramFilterFactory в цепочке фильтров с minGramSize 3, будет сгенерировано много токенов, и все на новой позиции.

Настройки maxFieldLength в solrconfig.xml ограничивают количество токенов, подлежащих индексации.
Значение по умолчанию - 10000 (которое все еще велико), но его можно превысить с большим содержимым и ngramfilter в цепочке фильтров.

<maxFieldLength>10000</maxFieldLength>

Попробуйте увеличить это значение до большого числа, переиндексируйте и проверьте, найдены ли совпадения.

2 голосов
/ 13 октября 2011

Я бы настоятельно рекомендовал использовать инструмент Field Analysis Debugging .Это доступно через сайт Solr Admin (щелкните ссылку [Анализ] рядом с [Конфиг]).Это очень мощный инструмент, в котором вы можете увидеть, как текстовое значение разбивается на слова, и показать полученные токены после того, как они пройдут через каждый фильтр в цепочке.

С помощью этого инструмента вы можете взять один из ваших документов, который не возвращается при запросе «Sony», и вставить текст для индексирования в поле индекса, а Sony в поле запроса, чтобы увидеть, как работает Solr.применяя ваши фильтры, а затем запрашивая это поле для совпадений.Затем вы можете изменить схему обратно на исходную без NGramFilterFactory и посмотреть, как ваш документ был изначально разбит и сопоставлен, чтобы сравнить, как NGramFilterFactory повлиял на индекс и запрос.в настройках minGramSize и maxGramSize, которые вы указали в настройках NGramFilterFactory.Пожалуйста, обратитесь к документации NGramFilterFactory в Solr Wiki для получения дополнительной информации о том, как они влияют на индексацию.

...