2

我使用带有 solr 的 lucene 来索引一些文档(新闻)。这些文件也有一个标题。现在,我尝试对 HEADLINE 字段进行构面搜索,以找到计数最高的术语。所有这些都可以正常工作,包括停用词列表。HEADLINE 字段是一个多值字段。我使用solr.StandardTokenizerFactory将这些字段拆分为单个术语(我知道,这不是最佳实践,但它是唯一的方法并且有效)。

有时,tokenizer 会拆分不应拆分的术语,例如9/11(拆分为 9 和 11)。所以我决定使用“protword”列表。“9/11”是这个原词列表的一部分。但没有变化。

这是我的 schema.xml 中的部分

  <fieldType name="facet_headline" class="solr.TextField" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory" protected="protwords.txt"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.TrimFilterFactory" />
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true"
                    words="stopwords.txt"
                    enablePositionIncrements="true"
                protected="protwords.txt"
                />
        </analyzer>
   </fieldType>

查看分面结果,我看到很多处理“9/11”的文档在“9”或“11”分组(分面),但从来没有“9/11”。

为什么这不起作用?

谢谢你。

4

2 回答 2

1

问题是您无法为您喜欢的任何过滤器/标记器设置受保护的字词。只有某些过滤器支持该功能。因此,StandardTokenizer不管怎样,忽略您的受保护词并将 9/11 拆分为“9”“11”。使用 aWhitespaceTokenizer将确保 9/11 不会被拆分。

此外,它看起来也不像 StopFilterFactory 承认受保护的词(它只是过滤掉像“to”或“and”这样的停用词。WordDelimiterFilterFactory使用受保护的词。因此,您可以尝试一下它是否可以帮助您.

查看如何分析您的文档的最佳方法是使用内置的Solr 管理实用程序来查看字段在被索引或查询时是如何分解的。

于 2011-09-09T15:50:10.783 回答
0

该问题的最终解决方案是选择solr.PatternTokenizerFactory

于 2011-09-15T15:27:00.960 回答