для [відфільтровано] не зареєстровано [запит]


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]. Я чітко маю запит на відфільтроване поле. Я дотримуюся формату, наведеного у відфільтрованій запитній документації на сторінці еластичного пошуку. 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
                    ]
                }
            }
        }
    }
}

Ось відмінності між двома запитами:

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, я змінив свою відповідь, вибачте за це.
Вал

Вал - Якщо ви знайдете хвилину, допоможіть мені, будь ласка, у питанні про логсташ, я бовтаю голову об стіл більше 48 годин, га, і я знаю, що ви експерт у цій галузі, який може допомогти врятувати день ха-ха, Дякую, я б назавжди був у боргу, якби ти міг !! stackoverflow.com/questions/45577572/…
Birdy

Дякую, це працювало для мене під час оновлення екземпляра ES5.1 до 7.1
jhob101
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.