使用SolrNet构建查询时缺失括号致结果不符的问题排查
SolrNet构建查询时缺失括号导致结果不符合预期的问题
我在使用SolrNet构建Solr查询时,发现生成的查询语句缺少必要的括号,导致无法返回预期结果。我需要确认是自身用法有误,还是SolrNet或Solr存在问题。
初始代码及问题表现
我的C#代码中可疑部分如下:
... var filters = new List<ISolrQuery>(); filters.Add(new SolrMultipleCriteriaQuery(new ISolrQuery[] { new SolrNotQuery(new SolrQueryByField("ispage_b", "true")), // 此行存在问题! new SolrQueryInList("myfield_sm", arrayOfStringValues) }, SolrMultipleCriteriaQuery.Operator.OR)); var options = new QueryOptions() { FilterQueries = filters }; ...
最终发送给Solr的查询语句为:
?q=*:*&fq(-ispage_b:(true) OR (myfield_sm:((value1) OR (value2) OR (value3)))&...
该语句无法返回预期结果,推测是减号-的优先级问题。我的需求是获取满足以下任一条件的文档:
myfield_sm匹配指定的任一值ispage_b未设为true(即值为false或文档中无此字段)
验证与修复
按照Solr查询语法,给-ispage_b查询添加一组括号后,语句即可正常工作:
?q=*:*&fq((-ispage_b:(true)) OR (myfield_sm:((value1) OR (value2) OR (value3))) ^ ^
改用手动编写的原始查询语句后,SolrNet能生成正确的查询并返回预期结果:
new SolrMultipleCriteriaQuery(new ISolrQuery[] { new SolrQuery("(-ispage_b:(true))"), // 改用原始查询 new SolrQueryInList("myfield_sm", arrayOfStringValues) }, SolrMultipleCriteriaQuery.Operator.OR)
疑问
我想明确:
- 初始使用
SolrNotQuery的方式是否存在错误? - 是不是
SolrNotQuery应该自动为生成的查询添加括号,这是SolrNet的一个bug? - 有没有其他可能导致该问题的原因?
内容的提问来源于stack exchange,提问作者mikaelnet
相关产品推荐
相关产品推荐

