我正在尝试使用一系列过滤器来实现一个合理的命名建议功能。目前我有
<fieldType name="suggester" class="solr.TextField" positionIncrementGap="1" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigramsIfNoShingles="true" maxShingleSize="2"
outputUnigrams="true"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigramsIfNoShingles="true" maxShingleSize="2"
outputUnigrams="true"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/>
</analyzer>
</fieldType>这当然需要更多的调整,但我在这个问题上追求的是一个特殊的方面。对于输入字符串mark daniel sievers,上面将匹配mark和sievers上的查询,但我真正想要的是减少EdgeNGramFilter的冗长,因为它会导致过度匹配,并使用过滤器/记号生成器,它可以以某种可配置的方式组合单词,例如输入mark daniel rex sievers create tokens mark sievers,mark daniel sievers,mark rex sievers等。我没有对此应用任何抛物线算法,但我想知道这样的野兽是否存在(几乎肯定存在),或者最好是自己编写一个过滤器插件?
Solr 3.3.0
发布于 2011-11-18 22:06:23
我会使用ShingleFilter:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ShingleFilterFactory
例如:
<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true"/>输入:mark daniel sievers。
生成的令牌:mark, mark daniel, mark daniel sievers, daniel, daniel sievers, sievers。
https://stackoverflow.com/questions/7561283
复制相似问题