在我的分析器链中,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不再支持这个问题了。
答案 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=""/>