在我的分析器链中,ShingleFilter在停用词过滤器之后。如docs中所述,ShingleFilter通过插入填充符(带有termtext“_”的符)来处理位置增量> 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克带状疱疹的小平面。由于这些停用词,所有方面的约束(或值)对于像“divide _句子_” 这样的填充符似乎都没有用
请你指导我。
使用Solr 4.4。
更新
我想到在StopFilter配置中将enablePositionIncrement设置为false。不确定是否可以解决问题,但是Lucene 4.4不再支持该功能。
最佳答案
在PatternReplaceFilterFactory
之后在分析器链中添加ShingleFilterFactory
。将所有包含填充符令牌的令牌替换为空字符串,即“”。
这可能会暂时解决您的问题,但对于永久解决方案,必须编写自己的分析仪或自定义ShingleFilter。
样本字段类型:
<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>
关于solr - Lucene分析器链:无填充 token 的ShingleFilter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18885764/