我使用lucene和solr索引一些文件(新闻)。那些文件也有HEADLINE。
现在,我尝试在HEADLINE字段上进行构面搜索,以查找具有最高计数的术语。
所有这一切都没有问题,包括一个禁用词列表。
HEADLINE字段是多值字段。我使用solr.StandardTokenizerFactory
将这些字段分成单个术语(我知道,这不是最佳实践,但这是唯一的方法,并且它有效)。
有时,标记生成器会分割不应分割的术语,如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”。
为什么这不起作用?
谢谢。
答案 0 :(得分:1)
问题是您无法为任何您喜欢的过滤器/标记器设置受保护的单词。只有某些过滤器支持该功能。因此,无论如何,StandardTokenizer
忽略了你的受保护词并将9/11分成'9''11'。使用WhitespaceTokenizer
可以确保9/11不被分割。
此外,它看起来不像StopFilterFactory承认受保护的单词(它只是过滤掉'to'或'和'之类的停止词。WordDelimiterFilterFactory使用受保护的单词。所以,你可以尝试一下看看它是否可以帮到你。
查看文档分析方式的最佳方法是使用内置的Solr administration utility来查看字段在编制索引或查询时如何细分。
答案 1 :(得分:0)
该问题的最终解决方案是选择solr.PatternTokenizerFactory