5

Tôi đang thực hiện phân cụm bản đồ bằng cách sử dụng tập hợp lưới Elasticsearch GeoHash. Truy vấn trả về trung bình 100-200 nhóm. Mỗi nhóm sử dụng tập hợp top_hits mà tôi sử dụng để trả lại 3 tài liệu cho mỗi cụm tổng hợp.Lọc ra tập hợp con top_hits dựa trên tổng số tài liệu

Vấn đề là tôi muốn trả lại top_hits chỉ khi tập hợp gốc (GeoHash) tổng hợp không quá 3 tài liệu.

Nếu cụm tập hợp nhiều hơn 3 tài liệu tôi không muốn ES trả lại bất kỳ tài liệu nào cho cụm này (vì tôi sẽ không sử dụng chúng).

Tôi đã cố gắng sử dụng Bucket Selector Aggregation, nhưng không quản lý để xây dựng đúng bucket_path. Tôi sử dụng tập hợp bộ chọn nhóm trên cùng cấp với tập hợp top_hits. Số lượng tài liệu cho một nhóm có sẵn tại top_hits.hits.total nhưng những gì tôi nhận được là reason=path not supported for [top_hits]: [hits.total].

Điều này có thể trong elasticsearch không? Điều này quan trọng đối với tôi, bởi vì trong hầu hết các truy vấn chỉ có một tỷ lệ nhỏ các nhóm sẽ có ít hơn 3 tài liệu. Nhưng phân nhóm số lượt truy cập hàng đầu luôn trả về 3 tài liệu hàng đầu ngay cả đối với các cụm 1000 tài liệu. Nếu kết quả của truy vấn trả lại 200 nhóm và chỉ 5 trong số đó là tổng hợp < = 3 tài liệu, vì vậy tôi chỉ muốn trả về 5 * 3 tài liệu chứ không phải 200 * 3 (phản hồi Te là 10MB trong trường hợp này).

Đây là aggs phần truy vấn của tôi:

"clusters": { 
    "geohash_grid": { 
    "field": "coordinates", 
    "precision": 3 
    }, 
    "aggs": { 
    "top_hits": { 
     "top_hits": { 
     "size": 3 
     } 
    }, 
    "top_hits_filter": { 
     "bucket_selector": { 
     "buckets_path": { 
      "total_hits": "top_hits._count" // tried top_hits.hits.total 
     }, 
     "script": { 
      "inline": "total_hits <= 3" 
     } 
     } 
    } 
    } 
} 

Trả lời

4

Hãy thử @ilivewithian này:

"aggs": { 
    "clusters": { 
     "geohash_grid": { 
     "field": "coordinates", 
     "precision": 3 
     }, 
     "aggs": { 
     "top_hits": { 
      "top_hits": { 
      "size": 3 
      } 
     }, 
     "top_hits_filter": { 
      "bucket_selector": { 
      "buckets_path": { 
       "total_hits": "_count" 
      }, 
      "script": { 
       "inline": "params.total_hits <= 3" 
      } 
      } 
     } 
     } 
    } 
    } 
+1

Cảm ơn, mặc dù nó hơi muộn đối với tôi như vì vấn đề này, chúng tôi đã ngừng sử dụng geohash tập hợp. Sẽ có một cái nhìn đôi khi vào tháng Giêng nếu điều này hoạt động và sau đó đánh dấu câu trả lời một cách thích hợp. – mbudnik

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