gpt4 book ai didi

elasticsearch - DSL查询从多个键上的字典数组中查找元素

转载 作者:行者123 更新时间:2023-12-02 23:06:49 24 4
gpt4 key购买 nike

我在 flex 搜索中有一个名为professor的索引

  • 如果需要交叉字段,则需要“与”条件
  • 我需要对条件字段数组的
  • 进行条件运算
  • 我需要搜索BusinessAreaResearch,这是字段数组(OR)语句

  • 1. Accounting必须检入 BusinessAreaname
  • 我需要搜索parentnameRole还是Developer条件,这是fields(OR)语句的数组

  • 我需要搜索TesterLocation(&)条件
  • 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"
    }
    }
    ]
    }
    })

    最佳答案

    您可以结合使用multi-match querybool query
    下面的搜索查询将以您的1(A)条件工作,其方式是在ResearchAccounting字段中搜索(BusinessArea.nameBusinessArea.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"
    }
    ]
    }
    }
    ]

    关于elasticsearch - DSL查询从多个键上的字典数组中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64572999/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com