[英]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>
当我分析“一只棕色的狐狸迅速越过懒惰的狗”时。 它给我以下结果:
如何从带状标记中删除_。 此外,是否有一种方法只能从停用词创建带状疱疹?
那是因为停用词将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.