0
我通過編程創建布爾查詢。像這樣:默認操作符Solr和BooleanQuery構建
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
why not que ry解析器負責調整默認操作符?
我爲Solr編寫了一個自定義查詢解析器。爲了實現它,我使用lucene的Extendable Query parser [這裏是描述](https://lucene.apache.org/core/4_3_1/queryparser/org/apache/lucene/queryparser/ext/ExtendableQueryParser.html)。然後,每個字段都有一個返回查詢的擴展。這組查詢然後返回到Solr ** QParser.parser ** – Windys
我明白了。默認的運算符邏輯會影響理解查詢字符串,但不會轉換'Query'對象。我相信,如果你正在實現自己構建'Query'的邏輯,它也將落到你的實現中來處理defaultOperator。如果你用'BooleanClause.Occur.SHOULD'明確地設置了一個子句,那麼這個子句就會被默認的操作符覆蓋,這似乎很奇怪。 – femtoRgon