nenhuma [consulta] registrada para [filtrada]

108

Tenho uma consulta que preciso filtrar os resultados.

Esta é minha consulta

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

Recebo um erro ao dizer no [query] registered for [filtered]. Obviamente, tenho uma consulta para o campo filtrado. Estou seguindo o formato fornecido na documentação da consulta filtrada na página elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

devxeq
fonte

Respostas:

185

A filteredconsulta foi descontinuada e removida no ES 5.0. Agora você deve usar a bool/must/filterconsulta.

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

Aqui estão as diferenças entre as duas consultas:

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

PS: a página de referência que você está vendo está localizada nas "páginas excluídas" do apêndice, portanto não faz mais parte da documentação principal.

Val
fonte
4
Ao usar 5.5, parece que o default_operator foi removido da consulta multi_match também val, então talvez valha a pena atualizar esta resposta, pois me levou ao caminho errado, presumindo que o acima iria funcionar, eu alterei a consulta para corresponder aos meus campos para então perceber não funcionou! Foi uma correção simples para mim, embora apenas removendo o operador padrão, mas talvez valha a pena editá-lo para futuros leitores. O erro é: [multi_match] a consulta não suporta [default_operator]
Birdy
3
@Birdy na verdade o parâmetro é nomeado operatore não default_operator, eu alterei minha resposta, desculpe por isso.
Val
Val - Se você tiver um minuto, por favor, me ajude com um problema de logstash, estou batendo minha cabeça fora da mesa por mais de 48 horas haha ​​e sei que você é um especialista na área que pode ajudar a salvar o dia haha, Obrigado, eu estaria para sempre em dívida se você pudesse! stackoverflow.com/questions/45577572/…
Birdy
Obrigado, isso funcionou para mim ao atualizar uma instância ES5.1 para 7.1
jhob101