Java 默认运算符Solr和BooleanQuery生成
我通过编程创建布尔查询。像这样:Java 默认运算符Solr和BooleanQuery生成,java,solr,lucene,Java,Solr,Lucene,我通过编程创建布尔查询。像这样: BooleanQuery query = new BooleanQuery(); for (Iterator<String> it = guids.iterator(); it.hasNext();) { String guid = it.next(); query.add(new BooleanClause( new TermQuery(
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));
}
问题是仍然返回一个查询,如
guid:dafafafa guid:dadafafaf
默认运算符表示:
guid:dafafafa AND guid:dadafafaf
但我想要的是:
guid:dafafafa OR guid:dadafafaf
为什么查询解析器不注意调整默认运算符???我不太明白您所说的“返回一个像这样的查询”是什么意思。。。但是,我假设您的意思是,您可以从结果查询的
Query.toString()
之类的内容中获得该结果
从解析器传递出去的查询不再与解析器有任何关系。该查询上没有默认运算符,默认运算符仅适用于解析传递给它的文本查询Query.toString
和其他类似方法尽最大努力以字符串形式表示任意复杂的查询。在执行此操作时,他们通常不会使用AND/OR语法,而是使用+/-语法,这与实际lucene查询的表示更密切相关,其中的子句设置为SHOULD
,MUST
,MUST\u not
重读一遍,我可能会误解,您可能只是在手动构建整个查询。但是,如果您没有通过QueryParser传递查询字符串,那么QueryParser与任何事情都有什么关系?我正在为Solr编写一个自定义查询解析器。为了实现它,我使用lucene的可扩展查询解析器。然后,对于每个字段,都有一个返回查询的扩展。然后将这组查询返回到Solr QParser.parserI,请参见。默认运算符逻辑将影响理解查询字符串,而不是转换
query
对象。我相信,如果您自己实现构建查询的逻辑,那么处理defaultOperator也将落在您的实现上。如果使用BooleanClause.occure.SHOULD
显式设置子句,则该子句随后被默认运算符覆盖似乎非常奇怪。
guid:dafafafa OR guid:dadafafaf