[запрос] не зарегистрирован для [отфильтровано]

108

У меня есть запрос, по которому мне нужно отфильтровать результаты.

Это мой запрос

{
    "query": {
        "filtered": {
            "query": {
                "multi_match": {
                    "default_operator": "AND",
                    "fields": [
                        "author",
                        "title",
                        "publisher",
                        "year"
                    ],
                    "query": "George Orwell"
                }
            },
            "filter": {
                "terms": {
                    "year": [
                        1980,
                        1981
                    ]
                }
            }
        }
    }
}

Я получаю сообщение об ошибке no [query] registered for [filtered]. У меня явно есть запрос для отфильтрованного поля. Я следую формату, указанному в документации по отфильтрованным запросам на странице elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

devxeq
источник

Ответы:

185

filteredЗапрос был устаревшим и удален в ES 5.0. bool/must/filterВместо этого вы должны использовать запрос.

{
    "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "operator": "and",
                    "fields": [
                        "author",
                        "title",
                        "publisher",
                        "year"
                    ],
                    "query": "George Orwell"
                }
            },
            "filter": {
                "terms": {
                    "year": [
                        1980,
                        1981
                    ]
                }
            }
        }
    }
}

Вот различия между двумя запросами:

3,4c3,4
<         "bool": {
<             "must": {
---
>         "filtered": {
>             "query": {
6c6
<                     "operator": "and",
---
>                     "default_operator": "AND",

PS: справочная страница, которую вы просматриваете, находится в "удаленных страницах" приложения, поэтому она больше не является частью основной документации.

Вал
источник
4
При использовании 5.5 кажется, что default_operator был удален из запроса multi_match, а также val, поэтому, возможно, стоит обновить этот ответ, поскольку он привел меня к неправильному пути, предполагая, что вышеупомянутое будет работать, я изменил запрос, чтобы он соответствовал моим полям, чтобы затем понять это не сработало! Для меня это было простое исправление, хотя я просто удалил оператор по умолчанию, но, возможно, стоит отредактировать для будущих читателей. Ошибка: запрос [multi_match] не поддерживает [default_operator]
Birdy
3
@Birdy на самом деле параметр назван, operatorа нет default_operator, я изменил свой ответ, извините за это.
Val
Вэл - Если у вас есть минутка, не могли бы вы помочь мне с проблемой logstash? Я бьюсь головой о стол уже более 48 часов, ха-ха, и я знаю, что вы эксперт в этой области, который может помочь спасти день, ха-ха, Спасибо, я был бы навсегда в долгу, если бы ты мог !! stackoverflow.com/questions/45577572/…
Birdy
Спасибо, у меня это сработало при обновлении экземпляра ES5.1 до 7.1
jhob101