使用嵌套数组的ElasticSearch查询

2eafrhcq  于 2023-03-12  发布在  ElasticSearch
关注(0)|答案(1)|浏览(188)

我有一个具有以下Map的索引(忽略其他字段)。“user_data”字段是一个嵌套的对象数组。现在,我想通过使用“name”字符串作为文本查询来查询ES结果。我的搜索目的是如果搜索结果的“user_data”数组包含具有相同“name”字符串的项目,则应首先显示这些结果。并且这些搜索结果的顺序应该按照相同“名称”项的“计数”降序排列。有人知道如何编写ES查询条件吗?提前感谢。
Map片段:

{
    "index_1": {
        "mappings": {
              
            "properties": {
                "user_data": {
                    "type": "nested",
                    "properties": {
                        "counts": {
                            "type": "integer"
                        },
                        "name": {
                            "type": "text"
                        }
                    }
                }
            }
        }
    }
}

某单据“user_data”数组中的数据示例:

"user_data": [{
        "counts": "5",
        "name": "abcd"
    },
    {
        "counts": "1",
        "name": "test 001"
    }
]

例如,如果我使用字符串“abcd”查询ES结果,“abcd”有3个结果,两个单据有“name”=“abcd”的项,那么这两个单据应该首先显示,然后如果一个单据的“abcd”项的计数=5,另一个单据的“abcd”项的计数=8,那么后一个应该作为第一个结果显示。并且前一个结果应当被显示为第二结果。
有谁知道如何为这个需求编写查询条件吗?提前感谢。

6bc51xsx

6bc51xsx1#

我做了一个例子,我做了查询排序字段计数。

PUT idx_test
{
  "mappings": {
    "properties": {
      "user_data": {
        "type": "nested",
        "properties": {
          "counts": {
            "type": "integer"
          },
          "name": {
            "type": "text"
          }
        }
      }
    }
  }
}

文件

POST idx_test/_doc
{
  "user_data": [
    {
      "counts": "5",
      "name": "abcd"
    },
    {
      "counts": "1",
      "name": "test 001"
    }
  ]
}

POST idx_test/_doc
{
  "user_data": [
    {
      "counts": "8",
      "name": "abcd"
    },
    {
      "counts": "1",
      "name": "test 001"
    }
  ]
}

POST idx_test/_doc
{
  "user_data": [
    {
      "name": "abcd"
    }
  ]
}

质询

POST idx_test/_search
{
  "query": {
    "nested": {
      "path": "user_data",
      "query": {
        "match": {
          "user_data.name": "abcd"
        }
      }
    }
  },
  "sort": [
    {
      "user_data.counts": {
        "order": "asc",
        "nested_path": "user_data"
      }
    }
  ]
}

相关问题