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