ElasticSearch добавляет несоответствующие документы в конце результатов поиска - PullRequest
0 голосов
/ 18 сентября 2018

Есть ли способ добавить несоответствующие документы в конце результатов поиска?

Я работал над проектом, в котором нам нужно искать документы по данным геолокации, но в некоторых документах нет данных о геолокации. В результате этого эти документы не возвращаются в результате поиска.

Есть ли способ добавить несоответствующие документы в конце результатов поиска?

Пример сопоставления:

PUT /my_locations
{
    "mappings": {
        "_doc": {
            "properties": {
                "address": {
                    "properties": {
                        "city": {
                            "type": "text"
                        },
                        "location": {
                            "type": "geo_point"
                        }
                    }
                }
            }
        }
    }
}

Данные с географическим местоположением:

PUT /my_locations/_doc/1
{
    "address" : {
        "city: "XYZ",
        "location" : {
            "lat" : 40.12,
            "lon" : -71.34
        }
    }
}

Данные без географического местоположения:

PUT /my_locations/_doc/2
{
    "address" : {
        "city: "ABC"
    }
}

Есть ли способ выполнить запрос о географическом расстоянии, который выберет документы с данными геолокации и добавит не географические документы в конце результата?

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-query.html#query-dsl-geo-distance-query

1 Ответ

0 голосов
/ 18 сентября 2018

У вас есть два отдельных запроса

  1. Получить документы в области
  2. Получить другие документы

Чтобы получить оба из них в одном поиске, будетзначит все документы появляются в одном результате и делятся рейтингами.Было бы сложно создать модель релевантности, которая получит первые 9 документов с адресом, а один - без адреса.

Но вы можете просто выполнить два запроса одновременно, один, скажем, первые 9 документов с указанием местоположения и одинбез каких-либо.

Пример:

GET my_locations/_msearch
{}
{"size":9,"query":{"geo_distance":{"distance":"200km","pin.location":{"lat":40,"lon":-70}}}}
{}
{"size":1,"query":{"bool":{"must_not":[{"exists":{"field":"pin.location"}}]}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...