我想實現一個合理的名稱建議功能使用一系列的過濾器。目前,我有solr過濾器或分詞器使詞的組合
<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
的冗長性,因爲它會導致過度匹配並使用可以某種可配置方式組合單詞的過濾器/標記器,例如for輸入mark daniel rex sievers
創建令牌mark sievers
,mark daniel sievers
,mark rex sievers
等。我沒有應用任何特定的算法,但我想知道這樣的野獸是否存在(幾乎肯定是)或最好是自己寫成一個過濾器插件?
的Solr 3.3.0