Как использовать фильтр geo_distance в качестве условия ИЛИ в Elasticsearch 7.x? - PullRequest
0 голосов
/ 02 апреля 2020

Я использую Elasticsearch 7.6 и пытаюсь запустить запрос, который запускает запрос geo_distance, чтобы найти подходящие документы в точном городе ИЛИ в данном случае на расстоянии 25 миль.

С точки зрения непрофессионала, это будет "Выполнить поиск всех рабочих мест в городе" Санта-Роза, Калифорния "ИЛИ 25 миль вокруг него. Если есть рабочие места в пределах 25 миль от Санта-Роза, Калифорния, эти документы должны быть возвращены в результаты поиска в дополнение к любым заданиям, где поле "job_location" определенно "Santa Rosa, CA"

Вот мой запрос, который возвращает 0 результатов, несмотря на то, что совпадают документы в пределах 25 миль от моей указанной долготы и широты это Санта Роза, Калифорния.

У меня должен быть неправильный синтаксис.

{
  "query": {
    "bool": {
      "filter": {
        "geo_distance": {
          "distance": "25 miles",
          "geo_location": "38.440429,-122.7140548"
        }
      },
      "must": [
        {
          "match": {
            "active": true
          }
        },
        {
          "bool": {
            "should": [
              {
                "term": {
                  "job_location": "Santa Rosa, CA"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

1 Ответ

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

Ваш запрос построен неправильно. Попробуйте, как это, и это должно работать так, как вы ожидаете. Все условия OR должны быть в bool/should:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "term": {
            "job_location": "Santa Rosa, CA"
          }
        },
        {
          "geo_distance": {
            "distance": "25m",
            "geo_location": "38.440429,-122.7140548"
          }
        }
      ],
      "filter": [
        {
          "match": {
            "active": true
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...