2013-05-27 36 views
5

tôi đang làm một tìm kiếm bằng một khía cạnh khoảng:Sự khác nhau giữa số lượng và total_count trên khía cạnh phạm vi elasticsearch là gì?

{ 
"query": { 
    "match_all": {} 
}, 
"facets": { 
    "prices": { 
     "range": { 
      "field": "product_price", 
      "ranges": [ 
       {"from": 0, "to": 200}, 
       {"from": 200, "to": 400}, 
       {"from": 400, "to": 600}, 
       {"from": 600, "to": 800}, 
       {"from": 800} 
      ] 
     } 
    } 
} 
} 

Và tôi đã như phản ứng phạm vi, như mong đợi:

[ 
    { 
    "from": 0.0, 
    "to": 200.0, 
    "count": 0, 
    "total_count": 0, 
    "total": 0.0, 
    "mean": 0.0 
    }, 
    { 
    "from": 200.0, 
    "to": 400.0, 
    "count": 1, 
    "min": 399.0, 
    "max": 399.0, 
    "total_count": 1, 
    "total": 399.0, 
    "mean": 399.0 
    }, 
    { 
    "from": 400.0, 
    "to": 600.0, 
    "count": 5, 
    "min": 499.0, 
    "max": 599.0, 
    "total_count": 5, 
    "total": 2886.0, 
    "mean": 577.2 
    }, 
    { 
    "from": 600.0, 
    "to": 800.0, 
    "count": 3, 
    "min": 690.0, 
    "max": 790.0, 
    "total_count": 3, 
    "total": 2179.0, 
    "mean": 726.3333333333334 
    }, 
    { 
    "from": 800.0, 
    "count": 2, 
    "min": 899.0, 
    "max": 990.0, 
    "total_count": 2, 
    "total": 1889.0, 
    "mean": 944.5 
    } 
] 

Trong tất cả các phản ứng các counttotal_count đều giống nhau. Không ai biết sự khác biệt giữa chúng là gì? Tôi nên sử dụng cái nào?

Trả lời

10

Câu hỏi rất hay! phần này là khó khăn kể từ khi bạn nhìn thấy các giá trị như nhau hầu hết thời gian, nhưng ... khi bạn sử dụng key_fieldvalue_field bạn có thể tính toán các dãy dựa trên một cánh đồng và các dữ liệu tổng hợp (min, max, total_count, totalmean) trên một lĩnh vực khác. Ví dụ: bạn có thể tính toán phạm vi trên trường phổ biến và xem dữ liệu tổng hợp trên trường giá, để xem mọi phạm vi phổ biến loại giá bạn có; có lẽ những người như sản phẩm giá rẻ, hoặc có thể không?

Hãy tưởng tượng sản phẩm của bạn có thể có nhiều giá, ví dụ: giá mỗi quốc gia khác nhau ... đây là khi bạn có count khác với total_count. Chúng ta hãy xem một ví dụ.

Hãy chỉ một vài tài liệu có chứa một lĩnh vực phổ biến và một lĩnh vực giá cả, mà có thể có nhiều giá trị:

{ 
    "popularity": 50, 
    "price": [28,30,32] 
} 

{ 
    "popularity": 120, 
    "price": [50,54] 
} 

Bây giờ hãy chạy theo yêu cầu tìm kiếm sau, xây dựng một phạm vi phạm vi bằng cách sử dụng trường phổ biến làm khóa và trường giá trị dưới dạng giá trị:

{ 
    "query": { 
     "match_all": {} 
    }, 
    "facets": { 
     "popularity_prices": { 
      "range": { 
       "key_field": "popularity", 
       "value_field": "price", 
       "ranges": [ 
        {"to": 100}, 
        {"from": 100} 
       ] 
      } 
     } 
    } 
} 

Đây là khía cạnh thu được:

{ 
    "popularity_prices": { 
     "_type": "range", 
     "ranges": [ 
     { 
      "to": 100, 
      "count": 1, 
      "min": 28, 
      "max": 32, 
      "total_count": 3, 
      "total": 90, 
      "mean": 30 
     }, 
     { 
      "from": 100, 
      "count": 1, 
      "min": 50, 
      "max": 54, 
      "total_count": 2, 
      "total": 104, 
      "mean": 52 
     } 
     ] 
    } 
} 

Nó nên được rõ ràng hơn bây giờ là total_count là gì. Nó liên quan đến value_field (giá): 3 giá trị giá khác nhau nằm trong phạm vi đầu tiên, nhưng chúng đến từ cùng một tài liệu. Mặt khác, count là số lượng tài liệu nằm trong phạm vi.

Bây giờ chúng ta cũng đã hiểu các tài liệu trong khi total_count là về giá trị trường, chúng ta sẽ mong đợi hành vi tương tự với một phạm vi bình thường, nếu trường giữ nhiều giá trị ... phải không? Thật không may là hiện tại không xảy ra, phạm vi phạm vi sẽ chỉ xem xét giá trị đầu tiên cho mỗi trường. Không chắc đó có phải là lỗi hay không. Do đó, counttotal_count luôn giống nhau.

+0

Đây có phải là tài liệu ở đâu đó không? Nếu có, bạn có một liên kết? Cảm ơn – jackdbernier

+0

Thực ra tôi chưa bao giờ đọc nó ở bất cứ nơi nào, chỉ cần thử nó ra bản thân mình :) Tôi đọc một cái gì đó trên "cuốn sách máy chủ ElasticSearch" về nhiều giá trị, nhưng điều đó không hoàn toàn rõ ràng với tôi anyway. – javanna

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