запрос bool не поддерживает ошибку эластичного поиска [search_after]

Я пытаюсь запросить свой индекс и выполнить фильтрацию в соответствии с географическим расстоянием одновременно, хотя я просматриваю свой индекс, но я получаю эту ошибку

Ошибка:

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "bool query does not support [search_after]",
                "line": 7,
                "col": 21
            }
        ],
        "type": "parsing_exception",
        "reason": "bool query does not support [search_after]",
        "line": 7,
        "col": 21
    },
    "status": 400
}

Фактический запрос:

{
    "query": {
        "bool" : {
            "should" : {
                "match_all" : {}
            },
            "search_after": [1463538857, "654323"],
            "filter" : {
                "geo_distance" : {
                    "distance" : "150km",
                    "location" : {
                        "lat" : xxxx,
                        "lon" : xxxxx
                    }
                }
            }
        }
    }
 }

person Community    schedule 04.02.2020    source источник


Ответы (1)


Попробуйте поставить search_after из query:

{
    "query": {
        "bool" : {
            "should" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_distance" : {
                    "distance" : "150km",
                    "location" : {
                        "lat" : xxxx,
                        "lon" : xxxxx
                    }
                }
            }
        }
    }
    search_after": [1463538857, "654323"]
 }

Итак, как следует из названия, search_after начнет сопоставление после заданного значения. Для этого вам нужно указать какой-то порядок. Например, в примере из документации < / а>

GET twitter/_search
{
    "size": 10,
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    },
    "search_after": [1463538857, "654323"],
    "sort": [
        {"date": "asc"},
        {"tie_breaker_id": "asc"}
    ]
}

сначала сортирует документы на основе полей date и tie_breaker_id, поэтому выражение "search_after": [1463538857, "654323"] означает начало поиска после даты 1463538857 и идентификатора разрешения_включений "654323"

Итак, что вам нужно сделать здесь, так это отсортировать документы на основе некоторого поля и после предоставить search_after желаемое значение.

person alpert    schedule 04.02.2020