You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)

疑问

我想明确:

  1. 初始使用SolrNotQuery的方式是否存在错误?
  2. 是不是SolrNotQuery应该自动为生成的查询添加括号,这是SolrNet的一个bug?
  3. 有没有其他可能导致该问题的原因?

内容的提问来源于stack exchange,提问作者mikaelnet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:11