资深患者 2022-09-05 17:04 采纳率: 0%
浏览 16
已结题

ElasticSearch Nested字段查询问题

环境:ES为7.10.2

数据-成员表,大概结构如下:

主键Id标题成员数据(nested结构:uid,uname)
11d1uid="f1",uname="灰太狼"、uid="f2",uname="蜗牛"
22d2uid="f1",uname="灰太狼"
PUT /f_data
{
  "mappings": {
    "properties": {
      "id":{"type": "keyword"},
      "title":{"type": "wildcard"},
      "members":{
        "type": "nested",
        "properties": {
          "uid":{"type":"keyword"},
          "uname":{"type":"wildcard"}
        } 
      }
    }
  }
}

测试数据如下:

PUT f_data/_doc/11
{"id":"11","title":"d1","members":[{"uid":"f1","uname":"灰太狼"},{"uid":"f2","uname":"蜗牛"}]}
PUT f_data/_doc/22
{"id":"22","title":"d2","members":[{"uid":"f1","uname":"灰太狼"}]}

针对members字段做 “无指定用户(uid)的数据”查询查询

查询条件:查询 members中无 f1 用户的数据
实现方式:基于nested查询+must_not查询
期望结果:无返回数据
实际结果:返回了d1数据

问题:如何通过查询实现此类需求

查询语句如下:

POST f_data/_search?filter_path=hits.hits._source
{
  "query": {
    "nested": {
      "path": "members",
      "query": {
        "bool": {
          "must_not": [
            {"term": {"members.uid": {"value": "f1"}}}
          ]
        }
      }
    }
  }
}

执行结果:

{
  "hits" : {
    "hits" : [
      {
        "_source" : {
          "id" : "11",
          "title" : "d1",
          "members" : [
            {
              "uid" : "f1",
              "uname" : "灰太狼"
            },
            {
              "uid" : "f2",
              "uname" : "蜗牛"
            }
          ]
        }
      }
    ]
  }
}

  • 写回答

1条回答 默认 最新

  • 资深患者 2022-09-06 09:10
    关注

    问题已解决:在你nested查询外部使用bool-must_not做约束

    # 查询不存在==未填写;已存在取反,在nested之下取
    POST f_data/_search?filter_path=hits.hits._source
    {
      "query": {
        "bool": {
          "must_not": [
            {"nested": {
              "path": "members",
              "query": {
                "term": {"members.uid": {"value": "f1"}}
              }
            }}
          ]
        }
      }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 创建了问题 9月5日

悬赏问题

  • ¥15 数据库获取信息反馈出错,直接查询了ref字段并且还使用了User文档的_id而不是自己的
  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)