2012-02-13 64 views
1

我正在嘗試使用EdgeNGramFilterFactory來索引名稱字段。我試圖模仿schema.xml中在Sunspot中使用edgeNGram過濾器

<fieldType name="text_prefix" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ISOLatin1AccentFilterFactory"/> 
    <filter class="solr.TrimFilterFactory" /> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="20" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ISOLatin1AccentFilterFactory"/> 
    <filter class="solr.TrimFilterFactory" /> 
    </analyzer> 
</fieldType> 

... 

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/> 

,並在我的模型,我有:

searchable do 
    text :name, :as => :text_prefix 

但它似乎沒有任何效果。我錯過了什麼?

+1

你說的有沒有影響呢?你在檢查什麼?你在問什麼? – Jayendra 2012-02-13 05:50:47

+0

我想搜索「Ne」並獲得像「紐約」這樣的條目。目前它什麼都不返回。 – lulalala 2012-02-13 07:19:09

回答

3

你的架構看起來除了一兩件事好:你的text_prefixstring型的,而不是text_prefix,因此它不使用EdgeNGramFilterFactory

你應該改變這一行

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/> 

這樣

<field name="text_prefix" stored="false" type="text_prefix" multiValued="true" indexed="true"/> 
+0

謝謝它正常工作。然而,你知道爲什麼內建的 lulalala 2012-02-15 02:18:27

+0

@lulalala很高興知道它的作品。對不起,我不明白你的問題,你可以重述嗎?通常字符串fieldType不會被標記等,它只是一個簡單的字符串。 – javanna 2012-02-15 08:18:20

+0

別擔心,我現在明白了。太陽黑子說它的默認字段類型是「文本」,但實際上它是一個**動態**「文本」字段,而不是實際上是字符串的靜態「文本」類型。 – lulalala 2012-02-24 01:45:26