Java 带[(或)和(或)和(或)]

Java 带[(或)和(或)和(或)],java,lucene,Java,Lucene,我使用BooleanQuery将三个不同的术语列表传递给termQuery。我得到了结果,但不确定这是否是使用布尔查询的正确方法。任何关于改进搜索结果的建议都会大有帮助 BooleanQuery finalQuery = new BooleanQuery(); BooleanQuery treeQuery = new BooleanQuery(); BooleanQuery fruitQuery = new BooleanQuery(); BooleanQuery areaQuery = new

我使用BooleanQuery将三个不同的术语列表传递给termQuery。我得到了结果,但不确定这是否是使用布尔查询的正确方法。任何关于改进搜索结果的建议都会大有帮助

BooleanQuery finalQuery = new BooleanQuery();
BooleanQuery treeQuery = new BooleanQuery();
BooleanQuery fruitQuery = new BooleanQuery();
BooleanQuery areaQuery = new BooleanQuery();        
String[] trees = {"Drago Milenario", "Sunland Baobab", "Fig tree", "The Cotton Tree", "olive",...........}; 
String[] fruitsTrees = {"Mango", "Apple", "Almond", "Bael", "Durian",........}; 
String[] localityLst = {"Asia", "Europe", "North America", "Other"}; 

List<String> treeLst = Arrays.asList(words);  
List<String> fruitsLst = Arrays.asList(words);  
List<String> areaLst = Arrays.asList(words);  
for (String tree : treeLst) {
    treeQuery.add(new TermQuery(new Term("content", "\"" + tree + "\"")), BooleanClause.Occur.SHOULD);
}
for (String fruitTree : fruitsLst) {
    fruitQuery.add(new TermQuery(new Term("content", "\"" + fruitTree + "\"")), BooleanClause.Occur.SHOULD);
}
for (String areatype : areaLst) { 
    areaQuery.add(new TermQuery(new Term("content", "\"" + areatype + "\"")), BooleanClause.Occur.SHOULD);
}

finalQuery.add(treeQuery, BooleanClause.Occur.SHOULD);
finalQuery.add(fruitQuery, BooleanClause.Occur.MUST);
finalQuery.add(areaQuery, BooleanClause.Occur.MUST);

if (finalQuery.toString().trim().length() == 0)
    return new ArrayList<String>();
QueryParser qp = new QueryParser(Version.LUCENE_4_9, "", stadAnalyzer);
Query query = qp.parse(finalQuery.toString())

这种方法有什么问题?你没有提到。只是想看看有没有更好的方法可以对我做同样的事情,这种方法是可以的。
( (content :"Drago Milenario" OR content :"Sunland Baobab" OR content:"Fig tree" OR ...) 
AND
  (content :"Mango" OR content :"Apple" OR ...) 
AND
(content :"Asia" OR content :"North America") )