Lucene Analyzer链:ShingleFilter没有填充令牌

时间:2013-09-19 03:32:50

标签: solr lucene faceted-search facet

在我的分析器链中,ShingleFilter位于禁用词过滤器之后。如docs中所述,ShingleFilter处理位置增量> 1通过插入填充令牌(带有术语“_”的令牌)。

For example : "please divide this sentence into biword shingles" 

Shingles of size 2 : please divide, divide _, _ sentence, sentence _, _ biword, biword shingles (assuming that "this, "into" are stopwords)

我想用填充标记消除那些带状疱疹,即我想要的输出仅包含:请分开,双字组带状疱疹。

我有一个专门的领域,用于带有高达4克的带状疱疹。由于这些停用词,所有方面约束(或值)对于“除_句_”

等填充物看起来毫无用处

请你指导我。

使用Solr 4.4。

更新

我想过在StopFilter配置中将enablePositionIncrement设置为false。不确定是否能解决问题,但Lucene 4.4不再支持这个问题了。

3 个答案:

答案 0 :(得分:4)

PatternReplaceFilterFactory之后在您的分析器链中添加ShingleFilterFactory。将所有包含填充符号的令牌替换为空字符串,即“”。

这可能暂时解决您的问题,但永久解决方案必须编写您自己的分析器或自定义ShingleFilter。

示例FieldType:

<fieldType name="text_general_shingle" class="solr.TextField" positionIncrementGap="100">     
        <analyzer>
       <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />       
        <filter class="solr.LowerCaseFilterFactory"/>           
        <filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern=".*_.*" replacement=""/>       
    </analyzer>     
    </fieldType>

答案 1 :(得分:1)

PositionFilter应该做的工作。它已弃用(请参阅Lucene documentation,了解原因),但它应该可以使用。

...
<filter class="solr.LowerCaseFilterFactory"/>           
<filter class="solr.PositionFilterFactory" positionIncrement="1"/>       
<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true"/>

当然,请确保在查询和索引时都应用它。

那就是说,你确定你需要这个吗?由于positionIncrements应该在查询和索引时以类似的方式应用,因此拥有它们通常会有所帮助。查询索引时是否看到特定问题?或者只是在调试输出中看到奇怪的东西?

答案 2 :(得分:0)

在Solr 4.7版本中,您可以选择覆盖&#34; _&#34;的默认填充标记。您可以将其设置为空白区域。配置如下:

<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" fillerToken=""/>