2012-07-07 34 views
6

Tôi đang cố gắng sử dụng Tìm kiếm đàn hồi cho phân tích - đặc biệt để theo dõi "nội dung hàng đầu" cho Rails CMS được cuộn bằng tay. Yêu cầu này phức tạp hơn một chút so với việc giữ một bộ đếm cho từng phần nội dung. Tôi sẽ không đi vào chiều sâu của vấn đề ngay bây giờ, vì tôi dường như không thể có được ngay cả những điều cơ bản làm việc.Sự cố với số lượng khía cạnh

Vấn đề của tôi là: Tôi đang sử dụng các khía cạnh và số lượng không phải là những gì tôi mong đợi. Ví dụ:

Query:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":1,"all_terms":false,"order":"count"}}}} 

Kết quả:

{"el_ids":{"_type":"terms","missing":0,"total":16672,"other":16657,"terms":[{"term":"quis","count":15}]}} 

Ok, tuyệt vời, phần nội dung với id "quis" có 15 hit và kể từ khi ordercount, nó nên là nội dung hàng đầu của tôi. Bây giờ, hãy cho phép 5 nội dung hàng đầu.

Query:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":5,"all_terms":false,"order":"count"}}}} 

Kết quả (chỉ là khía cạnh):

[ 
    {"term":"qgz9","count":26}, 
    {"term":"quis","count":15}, 
    {"term":"hnqn","count":15}, 
    {"term":"higp","count":15}, 
    {"term":"csns","count":15} 
] 

Huh? Vậy phần nội dung w/id "qgz9" có số lần truy cập nhiều hơn với 26? Tại sao nó không phải là kết quả hàng đầu trong truy vấn đầu tiên?

Ok, bây giờ hãy để 100 người đứng đầu.

Query:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":100,"all_terms":false,"order":"count"}}}} 

Kết quả (chỉ là khía cạnh):

[ 
    {"term":"qgz9","count":43}, 
    {"term":"difc","count":37}, 
    {"term":"zryp","count":31}, 
    {"term":"u65r","count":31}, 
    {"term":"sxsi","count":31}, 
    ... 
] 

Vì vậy, ngay bây giờ "qgz9" có 43 hit thay vì 26? Làm thế nào mà có thể được? Tôi có thể đảm bảo với bạn rằng không có gì xảy ra trong nền sửa đổi chỉ mục. Nếu tôi lặp lại các truy vấn này, tôi nhận được kết quả tương tự.

Khi tôi lặp lại quy trình tăng kích thước kết quả này, số lượng tiếp tục thay đổi và id nội dung mới xuất hiện ở trên cùng. Ai đó có thể giải thích cho tôi những gì tôi đang làm sai hoặc nơi mà sự hiểu biết của tôi về cách thức hoạt động này là thiếu sót?

Trả lời

7

Nó chỉ ra rằng đây là một known issue:

... cách N khía cạnh đầu làm việc tại là bằng cách đầu N từ mỗi phân đoạn, và sáp nhập các kết quả. Điều này có thể cho kết quả không chính xác.

Theo mặc định, chỉ mục của tôi đã được tạo với 5 phân đoạn. Bằng cách thay đổi điều này để chỉ mục chỉ có một mảnh duy nhất, số đếm hành xử nội tuyến với những kỳ vọng của tôi. Một cách giải quyết khác là luôn đặt size thành giá trị lớn hơn số lượng các khía cạnh dự kiến ​​và bóc ra các kết quả N hàng đầu.

+0

Đây vẫn chưa phải là cách tốt để đạt được điều đó. Sharding là một tính năng rất quan trọng của Elasticsearch. Bạn có thể mất rất nhiều hiệu suất-khôn ngoan nếu bạn xem xét chỉ có 1 mảnh vỡ. – eliasah

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