2013-12-10 30 views
2

簡單化問題描述:如何使用Lucene Query接口搜索值列表

Lucene索引每個文檔有兩個字段:ID和NAME。

我想使用Lucene Query接口進行查詢,以便我可以找到ID爲1或2或3等的所有文檔。要搜索的ID將在列表中,並且可能具有多達30個元素。

如果我使用查詢分析器我會做類似

ID:(1 OR 2 OR 3) 

但應用程序已經巨資致力於查詢界面,我想跟進目前的格局。只有我能想到的與查詢接口這樣做的方法是使用布爾查詢如下

BooleanQuery booleanQuery = new BooleanQuery(); 
(String searchId : lstIds) 
{ 
    booleanQuery.add(new TermQuery(new Term("ID", searchId)), BooleanClause.Occur.SHOULD); 
} 

創建n個單項查詢,並將它們組合但有這樣做的更好/更有效的方式?

回答

4

將查詢合併爲BooleanQuery是重現查詢ID:(1 OR 2 OR 3)的正確方法。查詢解析器將生成一個類似於您爲該語法提供的布爾查詢,所以您絕對在這裏做正確的事情。

您可能能夠利用PrefixQueryNumericRangeQueryTermRangeQuery來簡化問題,如果他們真的適合在實踐您的需求,但並沒有什麼錯,你在做什麼了。