我将默认运算符设置为QueryParser.Operator.AND并希望运行查询(在2个字段上)
(apple OR windows) AND source:(40 OR 41)
但这是Lucene正在做的事情
(windows) AND source:(40 OR 41)
为什么它以这种方式运行以及如何修复它?
更新
更多代码以及2个字段的含义
QueryParser parser = new MultiFieldQueryParser(CURRENT_LUCENE_VERSION,
new String[]{Config.TITLE_FIELD, Config.DESCRIPTION_FIELD}, getAnalyzer());
parser.setDefaultOperator(QueryParser.Operator.AND);
query = parser.parse(QueryParser.escape(searchString));
collector = TopFieldCollector.create(new Sort(
new SortField(Config.TIME_FIELD, SortField.LONG, true)),
Math.max(lastDoc, 1), true, true, true, true);
Filter fl = new TermRangeFilter(Config.TIME_FIELD,
"" + crit.getFilter().getStartDate().getTime(),
"" + crit.getFilter().getEndDate().getTime(), true, true);
indexSearcher.search(query, fl, collector);
我无法使用
+(content:apple content:windows) +(source:40 source:41)
因为我必须搜索2个字段
你如何得到Lucene正在做的事情?
我通过比较结果得到它。这是我通过toString()
得到的(title:apple content:apple) +(title:windows content:windows) +(source:40 source:41)
如何从第二个表达式中删除加号?