带[(或)和(或)和(或)]
我使用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())
这就是我期待的finalQuery字符串
( (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") )
共 (0) 个答案