【问题标题】:How to configure stemming in Solr?如何在 Solr 中配置词干提取?
【发布时间】:2011-03-12 22:27:59
【问题描述】:

我添加到 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>

【问题讨论】:

    标签: solr stemming


    【解决方案1】:

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

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

    【讨论】:

    • 两种方法都试过了。一样。
    • index: "Slots" 当我搜索时有结果:"Slots"、"Slot"、"Slotting"。索引:“美国”没有结果:“美国”。
    • 您应该做的第一件事是打开 Solr 管理 Web 应用程序,转到 Analysis 并选择您的字段类型/名称(检查两个详细的输出字段),在 Index 字段中键入 American,在 Query 中键入 America场地。这将允许您查看它是如何被分析的,按过滤器过滤。如需更详细的分析,请下载Luke,如果您还没有它(它是可执行的 jar)。启动它并加载 Lucene 索引。使用它来了解您的内容是如何被提取的以及许多其他有用的信息......
    • 您在尝试之间重新索引了内容,对吧?好的,现在您可以(使用“管理”>“分析”)准确查看每个词干分析器对“美国人”一词的影响。
    • 根据snowball.tartarus.org/demo.phpAmerican在词干化时保持原样
    【解决方案2】:

    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 也是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2015-03-18
      相关资源
      最近更新 更多