[フィルター済み]に登録された[クエリ]はありません


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

回答:


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
                    ]
                }
            }
        }
    }
}

2つのクエリの違いは次のとおりです。

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

ヴァル-少し時間があれば、ログスタッシュの問題を手伝ってくれませんか。私は48時間以上頭をテーブルから離してしまいました。私は、あなたがその日の節約を助けることができる分野の専門家であることを知っています。よろしくお願いします。stackoverflow.com/questions/45577572/...
バーディ

おかげで、ES5.1インスタンスを7.1にアップグレードするときにこれはうまくいきました
jhob101
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.