elasticsearch dsl python:如何在数组中按值搜索

时间:2019-06-14 00:28:12

标签: elasticsearch elasticsearch-dsl elasticsearch-dsl-py

我的索引具有以下结构:

[
    {
         name:"project1",
         users: [
                   {"id":"1"},
                   {"id":"2"}
         ]
    },
    #... more projects
]

我想知道如何获取特定用户的所有项目(通过其ID),这是我尝试过的:

q = Q("term", id="1") 
resp = projects_index.query("nested",path="users",query=q).execute()

但是我没有结果,我想念什么?
  谢谢
编辑: 这是我的索引映射:

   {
      "projects": {
        "mappings": {
          "doc": {
            "properties": {
              "created_at": {
                "type": "date"
              },
              "name": {
                "type": "text"
              },
              "users": {
                "type": "nested",
                "properties": {
                  "id": {
                    "type": "text"
                  }
                }
              }
            }
          }
        }
      }
    }

1 个答案:

答案 0 :(得分:1)

未获得结果的原因是,在指定嵌套路径时,您应提供包括父字段名称的全名,即您应使用users.id而不是id。因此查询将转换为以下内容:

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "users",
            "query": {
              "term": {
                "users.id": "1"
              }
            }
          }
        }
      ]
    }
  }
}

建议:将id字段的类型更改为keyword,以防止id值将令牌主义分为多个术语。