2013-05-27 46 views
30

Tôi có truy vấn đa kết hợp trong ES và muốn thêm bộ lọc.Tìm kiếm Đàn hồi, đa kết hợp với bộ lọc?

{ 
    "multi_match" : { 
    "query" : "this is a test", 
    "fields" : [ "subject^2", "message" ] 
    } 
} 

Cú pháp để thêm bộ lọc này là gì?

tôi đã cố gắng:

{ 
    "multi_match" => { 
    "query" => "list", 
    "fields" => [ "username" ] 

    }, 
"filter" => { 
     "term" => { "username" => "slimkicker"} 
    } 
} 

Trả lời

54

Tùy thuộc vào những gì bạn cần bạn phải đặt bộ lọc vào vị trí thích hợp. Bạn có hai lựa chọn:

Sử dụng một bộ lọc cấp cao nhất và áp dụng bộ lọc chỉ cho kết quả tìm kiếm nhưng chưa đến khía cạnh

{ 
    "query" : { 
     "multi_match" { 
      "query" : "this is a test", 
      "fields" : [ "subject^2", "message" ] 
     } 
    }, 
    "filter" : { 
     "term" : {"username":"slimkicker"} 
    } 
} 

Sử dụng một truy vấn lọc và áp dụng bộ lọc cho cả kết quả tìm kiếm và các khía cạnh

{ 
    "query" :{ 
     "filtered" : { 
      "query" : { 
       "multi_match" : { 
        "query" : "this is a test", 
        "fields" : [ "subject^2", "message" ] 
       } 
      }, 
      "filter" : { 
       "term" : {"username":"slimkicker"} 
      } 
     } 
    } 
} 
+10

Bạn có thể giải thích thêm chút ít về sự khác biệt giữa hai tùy chọn không? trong trường hợp sử dụng chúng nên được sử dụng? –

+1

là phần thứ hai về các bộ lọc ở bên cạnh như amazon.com ví dụ. – batmaci

35

với Elasticsearch 5 cú pháp đã thay đổi đến việc sử dụng truy vấn bool, ví dụ:

{ 
    "from" : 0, 
    "size" : 10, 
    "sort" : "publishDate", 
    "query": { 
    "bool": { 
     "must" : { 
     "multi_match" : { 
      "query":  "wedding", 
      "type":  "most_fields", 
      "fields":  [ "title", "text" ] 
     } 
     }, 
     "filter": { 
     "term": { 
      "locale": "english" 
     } 
     } 
    } 
    } 
} 

Tài liệu có thể được tìm thấy here.

+0

Tôi nghĩ rằng điều này là alreay sau phiên bản 2.x.x, không chỉ 5 – batmaci

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