2017-03-17 171 views
0

我有一個字符串Lucene的短語查詢address = "456 SOME STREET";沒有工作

我在Lucene的搜索,我創建了索引此

StringField address = new StringField(Constants.ORGANIZATION_ADDRESS, address,Field.Store.YES); 

,我使用短語查詢使用搜索該字符串代碼

String[] tokens = address.split("\\s+"); 
PhraseQuery addressQuery = new PhraseQuery(Constants.ORGANIZATION_ADDRESS, tokens); 
finalQuery.add(addressQuery, BooleanClause.Occur.MUST); 

但它沒有給我任何結果,我也嘗試過TermQuery,但那也不起作用。會很感激的任何幫助,因爲我現在已經嘗試了很多選擇,我無法弄清楚什麼是錯

我也曾嘗試以下 索引:

doc.add(new StringField(Constants.ORGANIZATION_ADDRESS, address,Field.Store.YES)); 

搜索使用期限查詢:

fullAddressExact= fullAddressExact.toLowerCase(); 
TermQuery tq = new TermQuery(new Term(Constants.ORGANIZATION_ADDRESS,fullAddressExact)); 
finalQuery.add(tq, BooleanClause.Occur.MUST); 

即使這並不給出任何結果。我打算獲得完全匹配

回答

0

您應該在索引文檔時使用TextField而不是StringField

StringField按原樣存儲字符串,但不會將其拆分爲標記,因此在您的示例中索引將包含"456 SOME STREET"。此術語只有一個TermQuery將檢索它(或PrefixQuery)。

TextField是標準的現場索引文本時,它將該文本標記(使用一個標記)和索引的話分開,在你的榜樣,456SOMESTREET都可以用來查找文件。 閱讀更多關於here(有點舊,但相關)。

+0

我需要爲字符串「456一些街頭」,所以我應該使用TemQuery和StringField一個精確匹配?雖然我也沒有得到結果。 – Ramandeep

+0

是的。如果它不起作用,請發佈您的代碼。 –

+0

我編輯了這個問題,幷包含代碼,我無法找到我所缺少的。 – Ramandeep