Как сделать запрос по определенному c индексу массива вasticsearch? - PullRequest
1 голос
/ 26 января 2020
Mapping: abc-data-type/_mapping/field/sData.status

{
    "abc_history": {
        "mappings": {
            "abc-data-type": {
                "sData.status": {
                    "full_name": "sData.status",
                    "mapping": {
                        "status": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}

Мой Json Ответ выглядит следующим образом:

{
  "took": 41,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": null,
    "hits": [
      {
        "_index": "abc_history",
        "_type": "abc-data-type",
        "_id": "5e29cbb7965809fe6cb22a7b",
        "_score": null,
        "_source": {
          "sData": [
            {
              "status": "In Progress"
            },
            {
              "status": "Started"
            },
            {
              "status": "Finished"
            }
          ]
        },
        "sort": [
          1579797431366
        ]
      }
    ]
  }
}

Мой запрос ES выглядит так, как показано ниже, и возвращает вышеуказанный ответ.

{
  "from": 0, 
  "size": 5, 
  "_source": ["sData.status"],
        "query": {
          "bool": {
            "must":[
              {
                "wildcard": {
                  "server": "*ABC2501*"
                }
              },         
              {
                "wildcard": {
                  "sData.status": "*Finish*"
                }
              }
            ]
          }
        },
        "sort": [
          { "requestDate": {"order": "desc"}}
        ]
}

Я хочу изменить запрос так, что ES выполняет поиск в third element из sData, что составляет sData[2] Я изменил запрос, как показано ниже, и выполняю поиск по шаблону для sData[2].status, но он ничего не возвращает.

{
  "from": 0, 
  "size": 5, 
  "_source": ["sData.status"],
        "query": {
          "bool": {
            "must":[
              {
                "wildcard": {
                  "server": "*ABC2501*"
                }
              },         
              {
                "wildcard": {
                  "sData[2].status": "*Finish*"
                }
              }
            ]
          }
        },
        "sort": [
          { "requestDate": {"order": "desc"}}
        ]
}
...