Geo расстояние запрос с регулярным выражением в elasti c поиск - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу сделать запрос с ключевым словом и показывать только те сообщения, которые находятся на расстоянии 150 км вокруг меня в запрашиваемом ключевом слове. Мой запрос, приведенный ниже, работает, но показывает все сообщения

{
    "query": {
        "regexp": {
            "title": {
                "value": ".*h.*",
                "flags": "ALL",
                "max_determinized_states": 10000,
                "rewrite": "constant_score"
            }
        }
    },
     "sort": [{
        "date": {
            "order": "desc"
        }
    }]
}

, но когда я добавляю запрос фильтра как следует, я получаю ошибку синтаксического анализа

"filter": {
              "geo_distance": {
                   "distance": "150km",
                        "location": {
                         "lat": \(latitude),
                         "lon": \(longitude)
                         }
                   }
          }

Любой, кто может помочь, пожалуйста

1 Ответ

0 голосов
/ 18 февраля 2020

Вот запрос, который вы должны использовать, который объединяет запрос regexp и запрос geo_distance с использованием запроса bool/filter:

{
  "query": {
    "bool": {
      "filter": [
        {
          "geo_distance": {
            "distance": "150km",
            "location": {
               "lat": \(latitude),
               "lon": \(longitude)
            }
          }
        },
        {
          "regexp": {
            "title": {
              "value": ".*h.*",
              "flags": "ALL",
              "max_determinized_states": 10000,
              "rewrite": "constant_score"
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    }
  ]
}
...