繁体   English   中英

solr阻止,停用词和木瓦没有提供预期的输出

[英]solr stemming, stop words and shingles not giving expected outputs

我试图删除不需要的单词并使用词干,最后创建带状疱疹。 但是,在删除停用词后,它在停用词的位置给了我带“ _”的带状疱疹。 我尝试使用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>

当我分析“一只棕色的狐狸迅速越过懒惰的狗”时。 它给我以下结果:

  1. _棕狐狸
  2. 棕狐狸
  3. 狐狸quickli跳
  4. quickli跳_
  5. 跳_ _
  6. _ _ lazi
  7. _懒狗

如何从带状标记中删除_。 此外,是否有一种方法只能从停用词创建带状疱疹?

那是因为停用词将PositionIncrements设置为False并将luceneMatchVersion设置为4.3

以此替换您的StopFilterFactory。

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

在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问题投票。

_由ShingleFilter插入,因为它用令牌_替换了空位置增量。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM