Выполнение запроса диапазона для определенного вложенного документа - PullRequest
1 голос
/ 30 апреля 2020

У меня есть такая структура документа. Для этого ниже двух документов у нас есть вложенные документы, называемые информацией взаимодействия. Мне просто нужно получить только те документы, которые имеют заголовок длительность и их значение больше 60

  {
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
      {
        "title": "duration",
        "value": "11"
      },
      {
        "title": "timetaken",
        "value": "9"
      },
      {
        "title": "talk_time",
        "value": "145"
      }
    ]
  },
  {
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
      {
        "title": "duration",
        "value": "120"
      },
      {
        "title": "timetaken",
        "value": "9"
      },
      {
        "title": "talk_time",
        "value": "60"
      }
    ]
  }
]

Можно ли получить только тот документ, который имеет title: duration и их значение больше 60. Значение Свойство во вложенном документе - это текст и ключевое слово.

1 Ответ

1 голос
/ 30 апреля 2020

В вашем решении есть несколько базовых c ошибок, чтобы использовать запрос диапазона (ie найдите документ, который имеет более 60 значений, вам нужно сохранить их как целое число в вашем случае).

Также, пожалуйста, ознакомьтесь с этим официальным руководством, в котором есть аналогичный пример.

Позвольте мне показать вам пошаговый пример того, как это сделать.

Индекс def

{
    "mappings" :{
        "properties" :{
            "interactionInfo" :{
                "type" : "nested"
            },
            "key" : {
                "type" : "keyword"
            }
        }
    }
}

Индекс образцов документов

{
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
      {
        "title": "duration",
        "value": 120. --> note, not using `""` double quotes which would store them as integer
      },
      {
        "title": "timetaken",
        "value": 9
      },
      {
        "title": "talk_time",
        "value": 60
      }
    ]
  }


{
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
        {
            "title": "duration",
            "value": 11
        },
        {
            "title": "timetaken",
            "value": 9
        },
        {
            "title": "talk_time",
            "value": 145
        }
    ]
}

Поисковый запрос

{
    "query": {
        "nested": {
            "path": "interactionInfo",
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "interactionInfo.title": "duration"
                            }
                        },
                        {
                            "range": {
                                "interactionInfo.value": {
                                    "gt": 60
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

И ваш ожидаемый результат поиска

"hits": [
      {
        "_index": "nestedsoint",
        "_type": "_doc",
        "_id": "2",
        "_score": 2.0296195,
        "_source": {
          "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
          "interactionInfo": [
            {
              "title": "duration",
              "value": 120
            },
            {
              "title": "timetaken",
              "value": 9
            },
            {
              "title": "talk_time",
              "value": 60
            }
          ]
        }
      }
    ]
...