没有[查询]注册[过滤]

dev*_*xeq 94 elasticsearch

我有一个查询,我需要筛选出结果.

这是我的查询

{
    "query": {
        "filtered": {
            "query": {
                "multi_match": {
                    "default_operator": "AND",
                    "fields": [
                        "author",
                        "title",
                        "publisher",
                        "year"
                    ],
                    "query": "George Orwell"
                }
            },
            "filter": {
                "terms": {
                    "year": [
                        1980,
                        1981
                    ]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说no [query] registered for [filtered].我清楚地查询了过滤字段.我遵循elasticsearch页面上过滤的查询文档中给出的格式. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

Val*_*Val 168

该参数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
                    ]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是两个查询之间的差异:

3,4c3,4
<         "bool": {
<             "must": {
---
>         "filtered": {
>             "query": {
6c6
<                     "operator": "and",
---
>                     "default_operator": "AND",
Run Code Online (Sandbox Code Playgroud)

PS:您正在查看的参考页面位于附录的"已删除页面"中,因此它不再是主要文档的一部分.

  • 当使用5.5时,似乎default_operator已经从multi_match查询以及val中删除了所以它可能值得更新这个答案因为它导致我走错了道路假设上面的工作我修改了查询以匹配我的字段然后实现它没用!这对我来说是一个简单的修复,虽然只是删除默认操作符但可能值得为将来的读者编辑,错误是:[multi_match]查询不支持[default_operator] (4认同)
  • @Birdy实际上参数名为`operator`而不是`default_operator`,我修改了我的答案,抱歉. (3认同)