solr stemming,stop words and shingles not not expected

时间:2015-10-18 00:40:49

标签: solr lucene

我正在尝试删除不需要的单词并使用词干,最后创建带状疱疹。然而,在删除了停止词后,它给了我带有" _"代替停止的话。    我尝试使用PatternReplaceFactory替换_但它不起作用。我有以下字段类型:

<fieldType name="common_shingle" class="solr.TextField">
    <analyzer type="index">
          <charFilter class="solr.HTMLStripCharFilterFactory"/>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
        <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern=".*_.*" replacement=""/>
        <filter class="solr.ShingleFilterFactory" outputUnigrams="false" minShingleSize="3" maxShingleSize="3"/>            
    </analyzer>
</fieldType>

当我分析&#34;一只棕色的狐狸快速跳过懒狗&#34;。它给了我以下结果:

  1. _ brown fox
  2. brown fox quickli
  3. fox quickli jump
  4. quickli jump _
  5. jump _ _
  6. _ _ lazi
  7. _ lazi dog
  8. 如何从shingle令牌中删除_。另外,有没有办法只用停用词创建带状疱疹?

3 个答案:

答案 0 :(得分:1)

这是因为停用词 将PositionIncrements设置为False,将luceneMatchVersion设置为4.3

用此替换你的StopFilterFactory。

  <filter class="solr.StopFilterFactory" luceneMatchVersion="4.3" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false"/>

答案 1 :(得分:1)

在SOLR的Jira中,有一个改进请求,其中包含一个可用的补丁:https://issues.apache.org/jira/browse/SOLR-11604

使用此补丁编译新的lucene-analyzers-common.jar并在schema.xml中使用skipFillerTokens =“true”选项

<filter class="solr.ShingleFilterFactory" ... skipFillerTokens="true"/>

如果您希望此补丁包含在下一个SOLR版本中,请投票支持此Jira问题。

答案 2 :(得分:0)

ShingleFilter插入_,因为它用空格_替换空位置增量。

如果要删除该值,则必须在 ShingleFilter之后执行PatternReplace ,因为在此之前它不存在于令牌流中。

ElasticSearch公开了一个选项,用于选择替换字符为“fillter_token”,但Solr的实现似乎直接使用Lucene实现,因此您应该能够使用fillerToken自行设置。尝试在ShingleFilter定义中执行fillerToken="",而不是使用patternreplacefilter。