Elasticsearch вложенный запрос гео-формы - PullRequest
0 голосов
/ 28 августа 2018

Предположим, у меня есть следующее отображение:

  "mappings": {
    "doc": {
      "properties": {
        "name": {
          "type": "text"
        },
        "location": {
          "type": "nested",
          "properties": {
            "point": {
              "type": "geo_shape"
            }
          }
        }
      }
    }
  }
}

В индексе есть один документ:

POST /example/doc?refresh
{
    "name": "Wind & Wetter, Berlin, Germany",
    "location": {            
        "type": "point",
        "coordinates": [13.400544, 52.530286]
    }
}

Как сделать вложенный запрос гео-формы? Пример обычного запроса гео-формы из документации (блок "bool" можно пропустить):

 {
        "query":{
            "bool": {
                "must": {
                    "match_all": {}
                },
                "filter": {
                    "geo_shape": {
                        "location": {
                            "shape": {
                                "type": "envelope",
                                "coordinates" : [[13.0, 53.0], [14.0, 52.0]]
                            },
                            "relation": "within"
                        }
                    }
                }
            }
        }
    }

Пример вложенного запроса:

{
    "query": {
        "nested" : {
            "path" : "obj1",
            "score_mode" : "avg",
            "query" : {
                "bool" : {
                    "must" : [
                    { "match" : {"obj1.name" : "blue"} },
                    { "range" : {"obj1.count" : {"gt" : 5}} }
                    ]
                }
            }
        }
    }
}

Теперь, как их объединить? В документации упоминается, что вложенный фильтр был заменен вложенным запросом. И что он ведет себя как запрос в «контексте запроса» и как фильтр в «контексте фильтра».

Если я попробую запросить пересечение с точкой:

    {
  "query": {
    "nested": {
      "path": "location",
      "query": {
        "geo_shape": {
          "location.point": {
            "shape": {
              "type": "point",
              "coordinates": [
                13.400544,
                52.530286
              ]
            },
            "relation": "disjoint"
          }
        }
      }
    }
  }
}

Я по-прежнему получаю обратно документ, даже если отношение "не пересекается", поэтому оно неверно. Я пробовал разные комбинации, с "bool" и "filter" и т. Д., Но запрос игнорируется, возвращая весь индекс. Может быть, это невозможно с этим типом картирования?

Очевидно, я что-то здесь упускаю. Может кто-нибудь помочь мне с этим, пожалуйста? Любая помощь с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...