2017-03-03 42 views
0

我想使用EdgeNGramFilterFactory從正面和背面生成Edge NGrams。對於前我使用Solr中的正面和背面EdgeNGrams

<filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="4"/> 

和背部,我使用

<filter class="solr.ReverseStringFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15"/> 
    <filter class="solr.ReverseStringFilterFactory"/> 

但是,當他們在一個單人分析儀一起使用時,第二組過濾器工廠都作用於的輸出第一個EdgeNGramFilterFactory。

是否可以在單個分析儀中生成正面和背面EdgeNGrams?或者我是否必須創建單獨的分析儀並使用copyField創建一個包含正面和背面EdgeNGrams的字段?


更新 實施例模式的要求,在下面的評論

<fieldType name="text_suggest_edge" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/> 
    </analyzer> 
</fieldType> 

<fieldType name="text_suggest_edge_end" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ReverseStringFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/> 
    <filter class="solr.ReverseStringFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ReverseStringFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/> 
    <filter class="solr.ReverseStringFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="item_name_edge" type="text_suggest_edge" indexed="true" stored="false" multiValued="true"/> 
<field name="item_name_edge_end" type="text_suggest_edge_end" indexed="true" stored="false" multiValued="true"/> 
<copyField source="item_name" dest="item_name_edge"/> 
<copyField source="item_name" dest="item_name_edge_end"/> 

更新2:包含樣本輸入和預期輸出

輸入字符串

Washington

所需邊緣的n-gram

WasWashWashi,... Washingtonashingtonshingtonhington ... gtonton

+0

你能舉一個例子嗎? –

+0

@SanjayDutt我已經爲這個問題添加了一個單獨的分析器的例子。 –

+0

謝謝,但我希望你給出給定輸入的例子,將會是你想要的預期輸出結果。 –

回答

1

如果你創建你可以做一個單人分析儀鏈您的自定義版本的EdgeNGramFilterFactory(在java中,然後將其插入到schema.xml中),從後面創建額外的ngram。

否則,您將需要複製字段到一個單獨的鏈的附加字段。

我老實說第一個選項太麻煩了,但是肯定是可以的。