2016-11-10 23 views
48

Tôi có một truy vấn mà tôi cần phải lọc ra kết quả.không có [truy vấn] đã đăng ký cho [đã lọc]

Đây là câu hỏi 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 nhận được một lỗi 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 đưa ra trong tài liệu truy vấn được lọc trên trang elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

Trả lời

90

Truy vấn filtered không được chấp nhận và bị xóa trong ES 5.0. Bây giờ, bạn nên sử dụng truy vấn bool/must/filter.

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

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

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

PS: trang tham khảo bạn đang tìm kiếm nằm trong "trang đã xóa" của phụ lục, do đó, nó không nằm trong tài liệu chính nữa.

+1

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

+0

@Birdy thực sự tham số có tên 'operator' chứ 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

+0

Val - Nếu bạn nhận được một phút bạn sẽ giúp tôi ra trên một vấn đề logstash, tôi đã đập đầu của tôi ra khỏi bàn trong hơn 48 giờ 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 trong ngày haha , Cảm ơn tôi sẽ mãi mãi mắc nợ nếu bạn có thể !! https://stackoverflow.com/questions/45577572/logstash-error-when-converting-mysql-value-to-nested-elasticsearch-property-on-s – Birdy

Các vấn đề liên quan