2015-08-23 61 views

回答

3

這取決於你想要做什麼。

  1. 如果2個不同的值之間的區別是名稱(「用戶1」和「用戶2」)經過短短數,你可以使用滴不信,所以用戶「user1」的LowerCaseTokenizerFactory,「用戶2」和'user4'將被索引爲'user'。你可以使用EdgeNGramFilterFactory來創建字段中的n-gram來編制索引,所以'user4'將被編入索引:'u','us','use','user','user4'。在這種情況下,當關鍵字是'u','我們','使用'或'用戶'時,您會發現'user',user1','user2'和'user4'。

  2. 正如@rs提到的,你可以使用通配符查詢。

+0

非常感謝。但是什麼方式有最好的表現?使用EdgeNGramFilterFactory或使用通配符查詢: -/ –

+0

不客氣:)我沒有比較他們的表現。 EdgeNGramFilterFactory在索引時需要更多時間並需要更多內存。雖然通配符在獲取數據時需要更多時間,並且不會在匹配條件中應用分析器。如果您決定使用通配符,如果您有大量數據,請不要在關鍵字(如「* user」)的開頭放置「*」或「?」。 –

0

如果你想在查詢時來解決這個問題,你可以創建一個「通配符」查詢對象和搜索「用戶*」得到的所有結果。舉個例子:

Query q = yourQueryBuilderInstance.keyword().wildcard().onField("yourField") 
     .matching("user*").createQuery();