我正在尝试删除不需要的单词并使用词干,最后创建带状疱疹。然而,在删除了停止词后,它给了我带有" _"代替停止的话。 我尝试使用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;。它给了我以下结果:
如何从shingle令牌中删除_。另外,有没有办法只用停用词创建带状疱疹?
答案 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。