Как настроить stemming в Solr? - PullRequest
7 голосов
/ 13 марта 2011

Добавляю в индекс индекса: «Американец».При поиске по «Америке» результатов нет.

Как настроить файл schema.xml для получения результатов?

текущая конфигурация:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
            <analyzer type="index">
                <tokenizer class="solr.WhitespaceTokenizerFactory" />
                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
                <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
                <filter class="solr.PorterStemFilterFactory"/>
            </analyzer>
            <analyzer type="query">
                <tokenizer class="solr.WhitespaceTokenizerFactory" />
                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
                <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
                <filter class="solr.PorterStemFilterFactory"/>
            </analyzer>
        </fieldType>

Ответы [ 2 ]

4 голосов
/ 13 марта 2011

Зачем вам два стеммера?
Попробуйте удалить EnglishPorterFilterFactory (устарело) из обоих типов анализаторов, перестроить индекс и затем попытаться выяснить, даст ли поиск American America.

Если это не сработает, другая вещь, которую вы можете попробовать, это удалить оба ваших фильтра стволовых фильтров и добавить SnowballPorterFilterFactory с language="English" вместо.

1 голос
/ 05 апреля 2017

Вы должны использовать один стеммер для analyzer, а EnglishPorterFilterFactory не рекомендуется, поскольку @Marko уже упоминалось. Поэтому вы должны удалить это из анализаторов.

Я использовал SnowballPorterFilterFactory для анализаторов индекса и запросов -

<fieldType name="text_stem">
    <analyzer> 
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SnowballPorterFilterFactory"/>
        <!-- other filters -->
    </analyzer>
</fieldType>

Определение fieldType самоочевидно, но на всякий случай:

  • Tokenizer solr.WhitespaceTokenizerFactory : эта операция разбивает предложения на слова, используя пробелы в качестве разделителей.

  • Фильтр solr.SnowballPorterFilterFactory : Этот фильтр будет применять алгоритм ствола к каждому слову (токену). В приведенном выше примере я выбрал алгоритм stemming. Solr предлагает несколько популярных алгоритмов стемминга.

Вы можете просмотреть несколько других алгоритмов stemming, например. HunspellStemFilterFactory , KStemFilterFactory тоже.

...