2011-09-09 14 views
2

我'使用solcene的lucene索引一些文件(新闻)。这些文件也有HEADLINE。 现在,我尝试在HEADLINE字段上进行方面搜索,以查找计数最高的字词。 所有这些工作都没有问题,包括停用词列表。 HEADLINE字段是一个多值字段。我使用solr.StandardTokenizerFactory将这些字段拆分为单个字词(我知道,这不是最佳实践,但它是唯一的方法和它的工作原理)。关于facet-result的保护词?

有时候,标记器拆分了不应该被拆分的术语,如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> 

看面结果的一部分,我看到了很多处理文件“911”分组(刻面)在“9”或“11 “但从来没有”9/11“。

为什么这不起作用?

谢谢。

回答

0

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

1

问题是,您无法为您喜欢的任何过滤器/标记器设置受保护的单词。只有某些过滤器支持该功能。因此,StandardTokenizer无视你受保护的词语,并将9/11分成'9''11'。使用WhitespaceTokenizer将确保9/11不会分裂。

此外,它看起来并不像StopFilterFactory人承认保护字是(它只是筛选出像“到”或“和”停的话。该WordDelimiterFilterFactory使用受保护的话,那么,你可能会与实验,看看是否它可以帮助你。

看到你的文件是如何分析的最好的方法是使用内置的Solr administration utility看到现场是怎样分解,当它被索引或查询。

+0

使用'WhitespaceTokenizer'是一个好主意。我将'splitOnNumerics =“0”'与'WhitespaceTokenizerFactory'结合使用。结果是,“9/11”现在是一个标记,但它不会将“:”与“9/11:”分开(例如)。所以'solr.PatternTokenizerFactory'是替代而不是'WhitespaceTokenizer'。它是除去标点符号的唯一选择吗? –