默认运算符Solr和BooleanQuery构建

时间:2013-07-10 13:46:24

标签: 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(
                       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

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

1 个答案:

答案 0 :(得分:0)

我不太明白你的意思“它会返回一个类似”的查询“但是,我认为你的意思是你从Query.toString()这样的结果查询得到的结果。

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

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