Lucene Analyzer 链:无填充标记的 ShingleFilter

pha*_*ani 3 lucene solr facet faceted-search

在我的分析器链中,ShingleFilter 位于停用词过滤器之后。如文档中所述,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)
Run Code Online (Sandbox Code Playgroud)

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

我有一个专门的领域,用于处理高达 4 克的带状疱疹。由于这些停用词,所有方面的约束(或值)对于像“divide _ sentence _”这样的填充物看起来都没用

请你指导我。

使用 Solr 4.4。

更新

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

Bit*_* GS 5

添加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>
Run Code Online (Sandbox Code Playgroud)