solr filter或tokenizer来组合单词

mar*_*ers 2 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>
Run Code Online (Sandbox Code Playgroud)

这肯定需要更多的调整,但我追求这个问题的一个特定方面.对于输入字符串mark daniel sievers,上面的内容将匹配查询mark,sievers但我真正想要的是减少其详细程度,EdgeNGramFilter因为它会导致匹配,并使用可以以某种可配置方式组合单词的过滤器/标记器,例如输入mark daniel rex sievers创建标记mark sievers,mark daniel sievers,mark rex sievers等等.我没有应用任何特定算法,但我想知道这样的野兽是否存在(几乎可以肯定)或最好将自己编写为过滤插件?

Solr 3.3.0

Rom*_*sse 5

我使用的是ShingleFilter:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ShingleFilterFactory

例如 :

<filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true"/>
Run Code Online (Sandbox Code Playgroud)

输入:mark daniel sievers.

代币产生:mark, mark daniel, mark daniel sievers, daniel, daniel sievers, sievers.