nessuna [query] registrata per [filtrata]


108

Ho una query di cui ho bisogno per filtrare i risultati.

Questa è la mia domanda

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

Ricevo un errore che dice no [query] registered for [filtered]. Ho chiaramente una query per il campo filtrato. Sto seguendo il formato indicato nella documentazione delle query filtrate nella pagina elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

Risposte:


185

La filteredquery è stata deprecata e rimossa in ES 5.0. Ora dovresti usare bool/must/filterinvece la query.

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

Ecco le differenze tra le due query:

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

PS: la pagina di riferimento che stai guardando si trova nelle "pagine eliminate" dell'appendice, quindi non fa più parte della documentazione principale.


4
Quando si utilizza 5.5 sembra che default_operator sia stato rimosso anche dalla query multi_match val quindi forse vale la pena aggiornare questa risposta poiché mi ha portato sulla strada sbagliata supponendo che quanto sopra avrebbe funzionato ho modificato la query per abbinare i miei campi per poi realizzarla non ha funzionato! È stata una soluzione semplice per me anche se rimuovevo solo l'operatore predefinito ma forse vale la pena modificarlo per i futuri lettori, L'errore è: [multi_match] la query non supporta [default_operator]
Birdy

3
@ Birdy in realtà il parametro è denominato operatore non default_operator, ho modificato la mia risposta, mi dispiace.
Val

Val - Se hai un minuto, mi aiuti per favore su un problema di registro, ho sbattuto la testa fuori dal tavolo per oltre 48 ore ahah e so che sei un esperto nel campo che potrebbe aiutare a salvare la giornata ahah, Grazie sarei per sempre in debito se potessi !! stackoverflow.com/questions/45577572/…
Birdy

Grazie, questo ha funzionato per me durante l'aggiornamento di un'istanza ES5.1 a 7.1
jhob101
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.