2015-04-27 19 views
5

Đầu Tạo một số dữ liệu ví dụ (e1, e2, e3 nhiều loại và kiểm tra được tên index):Làm cách nào để xóa kết quả tìm kiếm trùng lặp trong elasticsearch?

PUT test/e1/1 
{ 
    "id":1 
    "subject": "subject 1" 
} 
PUT test/e2/1 
{ 
    "id":1 
    "subject": "subject 2" 
} 
PUT test/e3/2 
{ 
    "id":2 
    "subject": "subject 3" 
} 

Bây giờ câu hỏi của tôi là: làm thế nào tôi có thể nhận được chỉ là hai dữ liệu này? xóa dữ liệu trùng lặp có cùng id trong kết quả curl -XGET _search.

test/e1/1 
{ 
    "id":1 
    "subject": "subject 1" 
} 
test/e3/2 
{ 
    "id":2 
    "subject": "subject 3" 
} 

Trả lời

9

Trước tiên, bạn sẽ cần phải tìm kiếm trên nhiều chỉ mục.
Sau đó, trên kết quả, hãy xóa ID trùng lặp.

POST http://myElastic.com/test/e1,e2,e3/_search 
{ 
    "aggs":{ 
    "dedup" : { 
     "terms":{ 
     "field": "id" 
     }, 
     "aggs":{ 
     "dedup_docs":{ 
      "top_hits":{ 
      "size":1 
      } 
     } 
     }  
    } 
    } 
} 

Điều này có thể giúp bạn:

+0

Liệu tập hợp giữ kết quả điểm số cao nhất? Và có một phương pháp để đặt kết quả 'aggs' vào phần' hits' trong kết quả json. – navins

+0

@navins Có, theo kết quả mặc định là thứ tự theo điểm số. Loại yêu cầu này sẽ chỉ giữ kết quả đầu tiên, ai cũng là kết quả điểm số cao nhất. Tôi không biết phần thứ hai của câu hỏi của bạn (có thể hỏi một câu hỏi thứ 2 về SO) –

+0

cảm ơn, chỉ cần đăng một câu hỏi khác ở đây: http://stackoverflow.com/questions/29887583/how-to-paging-aggregation-result -in-elasticsearch – navins

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