tidak ada [kueri] yang terdaftar untuk [difilter]

108

Saya memiliki pertanyaan yang saya perlukan untuk memfilter hasil.

Ini pertanyaan saya

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

Saya mendapatkan pesan kesalahan no [query] registered for [filtered]. Saya jelas memiliki kueri untuk bidang yang difilter. Saya mengikuti format yang diberikan dalam dokumentasi kueri yang difilter di halaman elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

devxeq
sumber

Jawaban:

185

The filteredpermintaan telah usang dan dihapus dalam ES 5.0. Anda sekarang harus menggunakan bool/must/filterkueri sebagai gantinya.

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

Berikut perbedaan antara kedua kueri tersebut:

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

NB: halaman referensi yang Anda lihat terletak di "halaman yang dihapus" pada lampiran, jadi itu bukan bagian dari dokumentasi utama lagi.

Val
sumber
4
Saat menggunakan 5.5 tampaknya default_operator telah dihapus dari kueri multi_match juga val jadi mungkin perlu memperbarui jawaban ini karena itu membawa saya ke jalan yang salah dengan asumsi hal di atas akan berhasil, saya mengubah kueri agar sesuai dengan bidang saya untuk kemudian menyadarinya tidak berhasil! Itu adalah perbaikan sederhana bagi saya meskipun hanya menghapus operator default tetapi mungkin perlu diedit untuk pembaca di masa mendatang, Kesalahannya adalah: [multi_match] kueri tidak mendukung [default_operator]
Birdy
3
@Birdy sebenarnya parameternya bernama operatordan tidak default_operator, saya telah mengubah jawaban saya, maaf tentang itu.
Val
Val - Jika Anda punya waktu sebentar, tolong bantu saya mengatasi masalah logstash, saya sudah membenturkan kepala saya dari meja selama lebih dari 48 jam haha ​​dan saya tahu Anda adalah ahli di bidang yang dapat membantu menyelamatkan hari haha, Terima kasih, saya akan selamanya berhutang jika Anda bisa !! stackoverflow.com/questions/45577572/…
Birdy
Terima kasih, ini berhasil untuk saya saat memutakhirkan instans ES5.1 ke 7.1
jhob101