[英]Lucene Phrase Query not working
我有一個字符串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);
即使這樣也沒有任何結果。 我打算獲得完全匹配
在為文檔建立索引時,您可能應該使用TextField
,而不是StringField
。
StringField
按原樣存儲字符串,而不會將其分成令牌,因此在您的示例中,索引將包含"456 SOME STREET"
。 僅帶有該術語的TermQuery
可以檢索它(或PrefixQuery
)。
TextField
是索引文本時的標准字段,它將文本拆分為令牌(使用Tokenizer)並分別索引單詞,在您的示例中456
, SOME
, STREET
都可用於查找文檔。 在這里閱讀有關它的更多信息(有點陳舊,但相關)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.