我以编程方式创建布尔查询。像这样:
BooleanQuery query = new BooleanQuery();
for (Iterator<String> it = guids.iterator(); it.hasNext();) {
String guid = it.next();
query.add(new BooleanClause(
new TermQuery(
new Term("guid",guid)
),
BooleanClause.Occur.SHOULD));
}
然后我从解析器返回它。在解析器中我设置
parser.setDefaultOperator(QueryParser.Operator.AND);
问题是仍然会返回类似
的查询guid:dafafafa guid:dadafafaf
使用默认运算符表示:
guid:dafafafa AND guid:dadafafaf
但我想要的是:
guid:dafafafa OR guid:dadafafaf
为什么不查询解析器负责调整默认运算符????
答案 0 :(得分:0)
我不太明白你的意思“它会返回一个类似”的查询“但是,我认为你的意思是你从Query.toString()
这样的结果查询得到的结果。
从解析器传出的查询不再与解析器有任何关系。该查询没有默认运算符,默认运算符仅适用于解析传递给它的文本查询。 Query.toString
和其他类似的方法尽最大努力以字符串形式表示任意复杂的查询。在这样做时,它们通常不会使用AND / OR语法,而是使用+/-语法,它更接近于实际lucene查询的表示,其中子句设置为SHOULD
,MUST
, MUST_NOT
。
重读,我可能会误解,你可能只是手动构建整个查询。但是如果你没有通过QueryParser传递查询字符串,那么QueryParser与任何东西都有什么关系呢?