2012-03-05 165 views
5

在我的Solr模式文件我有一個使用EdgeNGramFilterFactory搜索與EdgeNGramFilterFactory和搜索查詢

<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" /> 

默認搜索領域的最小長度假設我的搜索查詢是

tes 

所以我得到如下結果:

tess 
test 
tesla 
... 

如果我搜索

test 

我得到這樣

test 
tess 
tesla 
... 

結果它的確定,因爲我用EdgeNGramFilterFactory與minGramSize = 3 我想以下幾點:

當我搜索一個字符串,長度更超過3個字符(例如測試)我希望solr忽略由3個字符組成的所有術語(EdgeNGramFilterFactory)。當我搜索「測試」時,我不想得到像「苔絲」或「特斯拉」這樣的結果。我不會得到從測試開始的結果(4個字符)就像

test 
test for 
test-drive 
... 

是否可以配置solr?

回答

5

您可以在字段的索引分析器中配置EdgeNGram過濾器;對於查詢分析器,仍然做任何EdgeNGram沒有正規標記化。因此,當您搜索「測試」時,只會返回以「test」爲前綴的結果。

配置例如(不要爲查詢分析器定義EdgeNGram)

<fieldType name=...> 
    <analyzer type="index"> 
     ... 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> 
    </analyzer> 
    <analyzer type="query"> 
     ... 
     <!-- <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> --> 
    </analyzer> 
</fieldType>