7

我添加到 solr 索引:“美国”。当我按“美国”搜索时,没有结果。

应该如何配置 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>
4

2 回答 2

4

为什么会有两个词干分析器?
尝试EnglishPorterFilterFactory从您的两种分析器类型中删除(已弃用),重建索引,然后尝试搜索American是否会产生America

如果这不起作用,您可以尝试的另一件事是删除两个词干过滤器并添加SnowballPorterFilterFactorywith language="English"

于 2011-03-12T22:38:07.947 回答
2

您必须为 an 使用一个词干分析器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:此过滤器将对每个单词(令牌)应用词干算法。在上面的示例中,我选择了 Snowball Porter 词干算法。Solr 提供了一些流行的词干提取算法的实现。

您也可以浏览其他几种词干提取算法,例如HunspellStemFilterFactoryKStemFilterFactory

于 2017-04-05T06:57:06.593 回答