开发者社区 问答 正文

请教一下,tablestore查询时,如何排除字段为空的数据,直接在排除项里面输入空字符,查出来的数

"must_not_queries": [{ "method": "BoolQuery", "must_queries": null, "must_not_queries": null, "should_queries": [{ "method": "TermsQuery", "field_name": "news_xingzi", "terms": ["-",""] }], "minimum_should_match": 1 }]

展开
收起
游客tloy2y2px3vpc 2022-09-29 18:24:49 1003 分享 版权
阿里云 AI 助理回答

根据您提供的查询配置,存在一个结构上的问题,这可能导致您遇到[bool_query] sub query must not be null的异常。具体分析如下:

  1. 问题定位: 您的查询配置中,有一个must_not_queries嵌套了另一个BoolQuery,但在该嵌套的BoolQuery内部,must_queriesmust_not_queries都被设置为null,而只有should_queries包含了一个实际的查询条件(TermsQuery)。这样的配置不满足BoolQuery的规则要求,特别是当作为must_not_queries的一部分时,直接导致了子查询被认为是空的,进而引发异常。

  2. 解决方案:

    • 修正嵌套结构: 既然您的意图似乎是想在must_not_queries中排除某些特定值,您应该直接在最外层的BoolQuery中使用must_not来包含这个排除条件,而不是再次嵌套一个BoolQuery
    • 修改配置示例:
      {
      "bool": {
       "must_not": [
         {
           "terms": {
             "news_xingzi": ["-", ""]
           }
         }
       ]
      }
      }
      

    这样的配置直接在布尔查询的must_not部分指定了一个TermsQuery,用于排除news_xingzi字段值为-或空字符串的文档。

  3. 注意事项:

    • 确保在构造复合查询(如BoolQuery)时,理解每个部分的用途:must表示必须匹配,must_not表示必须不匹配,should表示可选匹配至少一项。
    • 当直接在must_not或类似位置使用具体的查询方法(如TermsQuery)时,无需再包裹一层额外的BoolQuery结构。
    • 对于复杂查询逻辑,逐步构建并测试每个部分,有助于快速定位和解决问题。

请根据上述建议调整您的查询配置,并重新执行查询操作。如果问题仍然存在,建议检查其他可能影响查询有效性的因素,或考虑咨询更专业的技术支持。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答