dsl查询,从多个键上的字典数组中查找元素

epggiuax  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(360)

我在ElasticSearch中有一个索引叫做 professor 如果是交叉场,我需要“和”条件
对于相同的字段数组,我需要
我需要搜查一下 BusinessArea 哪个是 Research 或者 Accounting 这是字段数组(或)语句
1.a BusinessArea 必须办理登机手续 name 以及 parentname
我需要搜查一下 RoleDeveloper 或者 Tester 条件这是字段数组(or)语句

我需要搜查一下 LocationNY (&)条件

test=[ { 'id': '1', 'name': 'Group1', 'BusinessArea': [ { 'id': '14', 'name': 'Accounting', 'parentname': 'Finance'}, { 'id': '3', 'name': 'Research', 'parentname': 'R & D' } ], 'Designation': [ { 'id': '16', 'name': 'L1' }, { 'id': '20', 'name': 'L2' }, { 'id': '25', 'name': 'L2' }, ] }, { 'id': '2', 'name': 'Group1', 'BusinessArea': [ { 'id': '14', 'name': 'Research', 'parentname': '' }, { 'id': '3', 'name': 'Accounting', 'parentname': '' } ], 'Role': [ { 'id': '5032', 'name': 'Tester' }, { 'id': '5033', 'name': 'Developer' } ], 'Designation': [ { 'id': '16', 'name': 'L1' }, { 'id': '20', 'name': 'L2' }, { 'id': '25', 'name': 'L2' }, ] }, { 'id': '1', 'name': 'Group1', 'BusinessArea': [ { 'id': '14', 'name': 'Research' }, { 'id': '3', 'name': 'Engineering', 'parentname': '' } ], 'Role': [ { 'id': '5032', 'name': 'Developer' }, { 'id': '5033', 'name': 'Developer', 'parentname': '' } ], 'Designation': [ { 'id': '16', 'name': 'L1' }, { 'id': '20', 'name': 'L2' }, { 'id': '25', 'name': 'L2' } ] } ]

查询如下,除了

1.a

content_search = es.search(index="professor", body={
"query": {
"bool": {
  "must": [
       {
      "terms": 
          {
        "BusinessArea.name.keyword": ["Research","Accounting"]
          }
       },
     {
       "terms": 
              {
                "Role.name.keyword": ["Developer","Tested"]
              }
      }
  ]
},
  "filter": [
    {
      "term": {
        "Location.keyword": "NY"
      }
    }
  ]

} })

e4yzc0pl

e4yzc0pl1#

您可以使用multi-match查询和bool查询的组合
下面的搜索查询将适用于您的1(a)条件,它将搜索( Research 或者 Accounting )在 BusinessArea.name 以及 BusinessArea.parentname 领域
搜索查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "multi_match": {
                  "query": "Research",
                  "fields": [
                    "BusinessArea.name.keyword",
                    "BusinessArea.parentname.keyword"
                  ]
                }
              },
              {
                "multi_match": {
                  "query": "Accounting",
                  "fields": [
                    "BusinessArea.name.keyword",
                    "BusinessArea.parentname.keyword"
                  ]
                }
              }
            ]
          }
        },
        {
          "terms": {
            "Role.name.keyword": [
              "Developer",
              "Tester"
            ]
          }
        }
      ]
    }
  }
}

搜索结果:

"hits": [
  {
    "_index": "64572999",
    "_type": "_doc",
    "_id": "2",
    "_score": 1.7587298,
    "_source": {
      "id": "2",
      "name": "Group1",
      "BusinessArea": [
        {
          "id": "14",
          "name": "Research",
          "parentname": ""
        },
        {
          "id": "3",
          "name": "Accounting",
          "parentname": ""
        }
      ],
      "Role": [
        {
          "id": "5032",
          "name": "Tester"
        },
        {
          "id": "5033",
          "name": "Developer"
        }
      ],
      "Designation": [
        {
          "id": "16",
          "name": "L1"
        },
        {
          "id": "20",
          "name": "L2"
        },
        {
          "id": "25",
          "name": "L2"
        }
      ]
    }
  },
  {
    "_index": "64572999",
    "_type": "_doc",
    "_id": "3",
    "_score": 1.167868,
    "_source": {
      "id": "1",
      "name": "Group1",
      "BusinessArea": [
        {
          "id": "14",
          "name": "Research"
        },
        {
          "id": "3",
          "name": "Engineering",
          "parentname": ""
        }
      ],
      "Role": [
        {
          "id": "5032",
          "name": "Developer"
        },
        {
          "id": "5033",
          "name": "Developer",
          "parentname": ""
        }
      ],
      "Designation": [
        {
          "id": "16",
          "name": "L1"
        },
        {
          "id": "20",
          "name": "L2"
        },
        {
          "id": "25",
          "name": "L2"
        }
      ]
    }
  }
]

相关问题