2015-01-05 13 views
7

Tôi cần thực hiện tổng hợp + sắp xếp + phân trang theo một trong các chỉ mục.Tổng hợp + phân loại + phân trang trong tìm kiếm đàn hồi

tôi đã học về chức năng nội bộ của đàn hồi tìm kiếm,

Tôi có 5 tổng mảnh, nó sẽ sắp xếp các mảnh cá nhân và lấy kết quả, theo mặc định mỗi phân đoạn sẽ trở lại trong 10 hồ sơ. Sau đó, 50 hồ sơ đều được sắp xếp một lần nữa và nó sẽ lấy các bản ghi top 10 kể từ bởi kích thước mặc định là 10.

ouput:

Kết quả tổng hợp được trả về trong lĩnh vực riêng biệt có tên là "Sự quy tụ" .Tại Để làm được phân trang trong dữ liệu tổng hợp này, kích thước và từ không hoạt động.

Vì vậy, mệt mỏi làm termBuilder.size (500), bây giờ logic là khác nhau theo liên kết này (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html)

Nó dẫn đến sự thiếu chính xác của dữ liệu.

Có thể bất kỳ ai đề xuất cho tôi cách xử lý tổng hợp + phân trang hay không.

Trả lời

9

Trong elasticsearch, bạn không thể phân trang tổng hợp. Truy vấn sẽ không cung cấp kết quả chính xác nếu kích thước được chỉ định. Vì vậy, cách duy nhất để phân loại và phân trang là cung cấp cho kích thước 0 và trả về tất cả các tài liệu và sau đó, nhận được kết quả cần thiết bằng cách tích lũy tất cả các kết quả trong danh sách để tiếp tục hoạt động.

+0

Thực tế, có thể phân trang và thực tế là một phần cơ bản của ES: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/pagination.html Tuy nhiên, tôi không biết rằng có thể trong quá trình tổng hợp. –

+5

chỉ có thể có số lần truy cập cho các lần truy cập sử dụng từ và kích thước. Nhưng để tập hợp, không có cách nào để phân trang với kết quả chính xác. Kích thước trong tập hợp nếu được chỉ định không cho kết quả chính xác. – Nishant

+0

Ah, tôi hiểu - vì vậy nó chỉ là không thể trong khi tập hợp? Odd rằng kích thước sẽ không cung cấp cho bạn kết quả chính xác khi bạn đang tổng hợp; Tôi tự hỏi tại sao vậy. Ý tôi là, nó có danh sách kết quả; Tôi tự hỏi tại sao nó không thể suy ra kích thước của nó hoặc phân lớp trên nó. –

0

Kết quả tổng hợp phân trang được hỗ trợ sử dụng partition. Phần này trong tài liệu chính thức rất hữu ích. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_filtering_values_with_partitions

{ 
    "size": 0, 
    "aggs": { 
     "expired_sessions": { 
     "terms": { 
      "field": "account_id", 
      "include": { 
       "partition": 0, 
       "num_partitions": 20 
      }, 
      "size": 10000, 
      "order": { 
       "last_access": "asc" 
      } 
     }, 
     "aggs": { 
      "last_access": { 
       "max": { 
        "field": "access_date" 
       } 
      } 
     } 
     } 
    } 
} 
0

Trong elasticsearch, không có giải pháp chính xác cho nó. You may use filtering with partition options nhưng phân vùng được áp dụng có thể làm hỏng kết quả được sắp xếp của bạn. ES thực hiện thao tác phân vùng trên một trường nhất định và trả về các nhóm từ phân vùng được yêu cầu. Vì vậy, kết quả của bạn kết thúc với phân vùng đã ra lệnh. (bạn cần thực hiện yêu cầu tiếp theo với số phân vùng khác để thu thập dữ liệu từ tất cả các phân vùng.)

Đề xuất của tôi mang lại giá trị kích thước cao hơn cho mỗi cụm từ như bạn đã đề cập trong câu hỏi của bạn.

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