2015-07-20 71 views
1

我正在學習solr。我想在Solr中使用ngrams。例如:如何使用與Solr匹配的ngrams

如果文檔中包含new york car driver,該文件不應返回以下查詢:

/select?q=york 
/select?q=new 
/select?q=new car 

,但它應該返回以下查詢

/select?q=new york 
/select?q=car 
/select?q=driver 
/select?q=car driver 

(應考慮新約克作爲一個單詞來獲得更好的結果。有一些單詞序列需要考慮爲單個單詞,例如: - 紐約,湯姆克魯斯等,這些單詞是預定義的;所有其他單詞應該被視爲正常)

如何使用Solr搜索來實現這一目標?

+1

所以你不想使用NGrams過濾器?實際上 – alexf

+0

不需要n-gram過濾器。 –

+0

紐約就是一個例子。如果我有一組詞應該總是考慮像紐約這樣的單個詞 – Koottalida

回答

1

第一次嘗試應該在「紐約」這個術語周圍加上引號,然後嘗試。

這將是你的第二次嘗試。

將Tokenizer從StandardTokenizerFactory更改爲KeywordTokenizerFactory

更改後重新索引數據並再次查詢。

第三個選項是使用StrField類型,它不能有任何標記或分析,只會給出完全匹配的結果。

不分析StrField類型,但逐字索引/存儲。

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
+0

/select?q =「紐約」給出結果。但是我怎樣才能達到第一個要求? – Koottalida

+1

第一個要求是什麼? –

+0

該文檔不應返回以下查詢: 1)/ select?q = york 2)/ select?q = new – Koottalida