在我的分析器链中,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/

10-09 07:16