2011-04-08 52 views
1

我無法讓ngrams工作。這裏是我的schema.xml:EdgeNGramFilterFactory不工作(不索引?)

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" /> 

    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
    </analyzer> 
</fieldType> 

我的數據庫有

「伊麗莎白」

「伊麗莎白」

一堆條目

當我試圖查詢「伊麗莎白」時,我只得到「伊麗莎白」而不是「伊麗莎白」。 奇怪的是,當我檢查了Solr管理,分析頁面顯示,EdgenGramFilterFactory確實可用,結果在「伊麗莎白」被擴展爲

ËEL禮eliz伊麗莎elizab elizabe elizabet伊麗莎白

看起來索引器沒有選擇這個。當我將同義詞過濾器從查詢塊移動到索引塊時,我遇到同樣的問題。也就是說,當我在查詢塊中有同義詞過濾器時,它可以工作,但是當我將它放入索引塊時,它不起作用。

我已重新啓動太陽黑子並重新索引多次。沒有骰子。有任何想法嗎?我如何直接檢查索引單詞列表?

回答

1

我想我找到了問題,它看起來像一個noob錯誤。

在我的模型中,使用了下面的結構按照教程之一:

class Institution < ActiveRecord::Base 
. 
. 
. 
end 

Sunspot.setup(Institution) do 
    text :name 
end 

這似乎並不當我開始拋出任何錯誤,停止或重新編制索引。讓我感到奇怪的是,在停止太陽黑子後我能夠立即進行重新索引。

我切換到

class Institution < ActiveRecord::Base 
    . 
    . 
    . 
    searchable do 
    text :name 
    end 
endH 

當我這樣做,我發現我不能停止太陽黑子後,重新編制。然而,當我開始使用太陽黑子並重新編制索引時,該索引似乎真的被刷新了,我的查詢最終表現得如預期一樣。