2015-07-03 103 views
0

我有一個奇怪的問題,搜索lucene標記索引與短語查詢。Lucene短語查詢和Tokenized索引

創建以下列方式

Document doc = new Document(); 
FieldType ft = new FieldType(StringField.TYPE_STORED); 
ft.setTokenized(true); 
Field field1 = new Field("key", "T-Test 1", ft); 
doc.add(field1) 
Field field2 = new Field("key", "T-Test 2", ft); 
doc.add(field2)  
Field field3 = new Field("key", "T-Test 3", ft); 
doc.add(field3)  
Field field4 = new Field("key", "T-Test", ft); 
doc.add(field4) 

我用WhitespaceAnalyzer來標記值的指數。 如果我現在要搜索字符串「T測試」,我得到的結果值爲 T-Test 1,T-Test 2,T-Test 3,T-Test

我以下面的方式創建查詢。

PhraseQuery query = new PhraseQuery(); 
query.add(new Term("key","T-Test")); 
query.setSlop(0);  
BooleanQuery mainQuery = new BooleanQuery(); 
mainQuery.add(query, Occur.MUST); 

我tryed也期運用具有相同的效果ComplexPhraseQueryParser。我只是得到所有的T-Test值。但我只想要T-測試,而不是「T測試1,T測試2和T測試3」 任何人都可以幫助我。 我接近成爲絕望 謝謝

回答

0

我只是使用Stringfield的問題。這個解決方案工作得很好。

FieldType ft = new FieldType(StringField.TYPE_STORED); 
ft.setTokenized(true); 
StringField field = new StringField(key, value,Field.Store.YES);