0

我以编程方式创建布尔查询。像这样:

    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

为什么查询解析器不负责调整默认运算符????

4

1 回答 1

0

我不太清楚您所说的“返回类似查询”是什么意思……但是,我假设您的意思是您从Query.toString()结果查询中的类似内容中得到了它。

从解析器传出的查询不再与解析器有任何关系。该查询没有默认运算符,默认运算符仅适用于解析传递给它的文本查询。 Query.toString和其他类似的方法尽最大努力以字符串形式表示任意复杂的查询。在这样做时,他们通常不会使用 AND/OR 语法,而是使用 +/- 语法,这与实际 lucene 查询的表示更密切相关,其中子句设置为SHOULD, MUST, MUST_NOT

重读,我可能理解有误,你可能只是手动构建整个查询。但是,如果您不通过 QueryParser 传递查询字符串,那么 QueryParser 与任何事情有什么关系呢?

于 2013-07-10T15:42:28.230 回答