ninguna [consulta] registrada para [filtrada]

108

Tengo una consulta que necesito para filtrar los resultados.

Esta es mi consulta

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

Recibo un error que dice no [query] registered for [filtered]. Claramente tengo una consulta para el campo filtrado. Estoy siguiendo el formato dado en la documentación de consulta filtrada en la página de elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

devxeq
fuente

Respuestas:

185

La filteredconsulta ha quedado obsoleta y se eliminó en ES 5.0. Ahora debería utilizar la bool/must/filterconsulta en su lugar.

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

Aquí están las diferencias entre las dos consultas:

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

PD: la página de referencia que estás viendo se encuentra en las "páginas eliminadas" del apéndice, por lo que ya no forma parte de la documentación principal.

Val
fuente
4
Cuando se usa 5.5, parece que default_operator también se ha eliminado de la consulta multi_match, por lo que tal vez valga la pena actualizar esta respuesta, ya que me llevó por el camino equivocado, asumiendo que lo anterior iba a funcionar, modifiqué la consulta para que coincida con mis campos para luego darme cuenta no funcionó! Fue una solución simple para mí, aunque solo quité el operador predeterminado, pero tal vez valga la pena editarlo para futuros lectores. El error es: la consulta [multi_match] no admite [default_operator]
Birdy
3
@Birdy, en realidad, el parámetro se nombra operatory no default_operator, he modificado mi respuesta, lo siento.
Val
Val - Si tienes un minuto, ¿podrías ayudarme con un problema de logstash? Me he golpeado la cabeza con la mesa durante más de 48 horas, jaja, y sé que eres un experto en el campo que podría ayudar a salvar el día, jaja. Gracias, estaría siempre endeudado si pudieras. stackoverflow.com/questions/45577572/…
Birdy
Gracias, esto funcionó para mí al actualizar una instancia de ES5.1 a 7.1
jhob101