3

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

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

我有一个专门的领域,用于处理最大 4 克的带状疱疹。由于这些停用词,所有方面的约束(或值)对于像“divide_sentence_”这样的填充物看起来毫无用处

请你指导我。

使用 Solr 4.4。

更新

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

4

3 回答 3

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>
于 2013-09-19T12:02:20.227 回答
1

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

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

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

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

于 2013-09-19T15:31:44.013 回答
0

在 Solr 4.7 版本中,您可以选择覆盖默认填充标记“_”。您可以将其设置为空白区域。配置将如下所示:

<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" fillerToken=""/>
于 2014-05-22T17:08:14.893 回答