không có [truy vấn] nào được đăng ký cho [đã lọc]


108

Tôi có một truy vấn mà tôi cần lọc ra kết quả.

Đây là truy vấn của tôi

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

Tôi gặp lỗi khi nói no [query] registered for [filtered]. Tôi rõ ràng có một truy vấn cho trường được lọc. Tôi đang theo định dạng được cung cấp trong tài liệu truy vấn đã lọc trên trang tìm kiếm đàn hồi. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

Câu trả lời:


185

Các filteredtruy vấn đã bị phản đối và loại bỏ trong ES 5.0. Bây giờ bạn nên sử dụng bool/must/filtertruy vấn thay thế.

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

Dưới đây là sự khác biệt giữa hai truy vấn:

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

Tái bút: trang tham khảo bạn đang xem nằm trong "các trang đã xóa" của phụ lục, vì vậy nó không còn là một phần của tài liệu chính nữa.


4
Khi sử dụng 5.5, có vẻ như default_operator cũng đã bị xóa khỏi truy vấn multi_match vì vậy có thể đáng để cập nhật câu trả lời này vì nó đã khiến tôi đi nhầm đường giả sử ở trên sẽ hoạt động. Tôi đã sửa đổi truy vấn để khớp với các trường của mình để sau đó nhận ra nó không hoạt động! Đó là một sửa chữa đơn giản đối với tôi mặc dù bu chỉ cần loại bỏ các nhà điều hành mặc định nhưng biên tập có thể có giá trị cho độc giả trong tương lai, Lỗi này là: [multi_match] truy vấn không hỗ trợ [default_operator]
Birdy

3
@Birdy thực sự là tham số được đặt tên operatorvà không phải default_operator, tôi đã sửa đổi câu trả lời của mình, xin lỗi về điều đó.
Val

Val - Nếu bạn có một phút, bạn có thể vui lòng giúp tôi về vấn đề logstash, tôi đã đập đầu không thể bàn cãi hơn 48 giờ rồi haha ​​và tôi biết bạn là một chuyên gia trong lĩnh vực có thể giúp tiết kiệm một ngày haha, Cảm ơn tôi sẽ mãi mãi mắc nợ nếu bạn có thể !! stackoverflow.com/questions/45577572/…
Birdy

Cảm ơn, điều này đã hiệu quả với tôi khi nâng cấp phiên bản ES5.1 lên 7.1
jhob101
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.