Как использовать фильтр geo_distance в качестве условия ИЛИ в Elasticsearch 7.x?

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

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

Вот мой запрос, который возвращает 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"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

person user1669296    schedule 02.04.2020    source источник


Ответы (1)


Ваш запрос построен неправильно. Попробуйте так, и это должно работать так, как вы ожидаете. Все условия ИЛИ должны быть в 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
          }
        }
      ]
    }
  }
}
person Val    schedule 03.04.2020