2015-01-28 11 views
20

Elasticsearch documentation gợi ý * rằng mảnh của họ mãTìm giá trị khác biệt, đếm không phân biệt trong elasticsearch

* tài liệu cố định

GET /cars/transactions/_search?search_type=count 
{ 
    "aggs": { 
    "distinct_colors": { 
     "cardinality": { 
     "field": "color" 
     } 
    } 
    } 
} 

tương ứng với truy vấn sql

SELECT DISTINCT(color) FROM cars 

nhưng nó thực sự tương ứng với

SELECT COUNT(DISTINCT(color)) FROM cars 

Tôi không muốn biết có bao nhiêu giá trị riêng biệt mà tôi có nhưng giá trị khác biệt là gì. Bất cứ ai cũng biết làm thế nào để đạt được điều đó?

+0

Duplicate của https://stackoverflow.com/questions/25465215/elasticsearch-return-unique-values ​​ – Anton

Trả lời

20

Sử dụng terms aggregation trên trường color. Và bạn cần chú ý đến trường mà bạn muốn nhận giá trị riêng biệt được phân tích, nghĩa là bạn cần đảm bảo bạn không mã hóa nó trong khi lập chỉ mục, nếu không, mọi mục nhập trong tập hợp sẽ là một cụm từ khác nội dung của trường.

Nếu bạn vẫn muốn mã thông báo VÀ sử dụng kết hợp terms, bạn có thể muốn xem not_analyzed loại lập chỉ mục cho trường đó và có thể sử dụng multi fields.

Điều khoản hợp cho xe ô tô:

GET /cars/transactions/_search?search_type=count 
{ 
    "aggs": { 
    "distinct_colors": { 
     "terms": { 
     "field": "color", 
     "size": 1000 
     } 
    } 
    } 
} 
16

Để cập nhật câu trả lời tuyệt vời từ Andrei Stefan, chúng ta cần phải nói rằng các tham số truy vấn search_type=count là không có thêm hỗ trợ trong Elasticsearch 5. Các phương pháp mới để làm điều này là để thêm "size" : 0 trong cơ thể như:

GET /cars/transactions/_search 
{ 
    "size": 0, 
    "aggs": { 
    "distinct_colors": { 
     "terms": { 
     "field": "color", 
     "size": 1000 
     } 
    } 
    } 
} 
+3

không 1000 có ý nghĩa gì? – codereal

+0

Về tổng hợp, [tài liệu] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size) nói rằng: 'Kích thước có thể được đặt để xác định số lượng cụm từ nên được trả lại trong danh sách cụm từ tổng thể.' –

+2

Tổng hợp thuật ngữ theo mặc định chỉ trả lại 10 nhóm. "kích thước" chỉ định số lượng nhóm được yêu cầu để phản hồi. Xem https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size –

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