Tôi có hàng trăm nghìn tài liệu trong chỉ mục elasticsearch với các vĩ độ và kinh độ liên quan (được lưu trữ dưới dạng các loại geo_point). Tôi muốn có thể tạo hình ảnh bản đồ trông giống như sau: http://leaflet.github.io/Leaflet.markercluster/example/marker-clustering-realworld.388.htmlPhân cụm không gian địa lý với elasticsearch
Vì vậy, tôi nghĩ điều tôi muốn là chạy truy vấn có hộp giới hạn (ví dụ: ranh giới bản đồ mà người dùng đang xem) và trả về một bản tóm tắt các cụm trong hộp giới hạn này. Có cách nào tốt để thực hiện điều này trong elasticsearch? Một chiến lược lập chỉ mục mới có lẽ? Một cái gì đó giống như geohashes có thể làm việc, nhưng nó sẽ cụm những thứ vào một lưới hình chữ nhật, chứ không phải là đa giác tùy ý dựa trên mật độ điểm như đã thấy trong ví dụ trên.
@kumetix - Câu hỏi hay. Tôi đang trả lời nhận xét của bạn ở đây vì văn bản quá dài để đưa vào nhận xét khác. Cài đặt geohash_precision sẽ quy định độ chính xác tối đa mà tại đó tổng hợp geohash sẽ có thể trả lại. Ví dụ, nếu geohash_precision được đặt thành 8, chúng ta có thể chạy một tập hợp geohash trên trường đó với độ chính xác cao nhất 8. Điều này, theo số reference, kết quả trả về được nhóm trong các hộp geohash khoảng 38.2m x 19m. Độ chính xác 7 hoặc 8 có thể đủ chính xác để hiển thị bản đồ nhiệt dựa trên web như bản đồ tôi đã đề cập trong ví dụ trên.
Theo như cách geohash_precision ảnh hưởng đến nội bộ cụm, tôi đoán cài đặt lưu trữ một chuỗi geohash có độ dài < = geohash_precision bên trong geo_point. Hãy nói rằng chúng ta có một điểm tại Tượng Nữ thần Tự do: 40.6892, -74.0444. Geohash12 cho điều này là: dr5r7p4xb2ts. Thiết geohash_precision trong geo_point đến 8 trong nội bộ sẽ lưu trữ các chuỗi: d dr DR5 dr5r dr5r7 dr5r7p dr5r7p4 dr5r7p4x
và geohash_precision 12 sẽ bổ sung trong nội bộ lưu trữ các chuỗi: dr5r7p4xb dr5r7p4xb2 dr5r7p4xb2t dr5r7p4xb2ts
dẫn đến chi phí lưu trữ cao hơn một chút cho mỗi điểm geo_point. Đặt geohash_precision thành một giá trị khoảng cách (1km, 1m, v.v.) có thể chỉ lưu trữ nó ở giá trị độ dài chuỗi chính xác geohash gần nhất.
Lưu ý: Làm thế nào để tính toán geohashes sử dụng python
$ pip install python-geohash
>>> import geohash
>>> geohash.encode(40.6892,-74.0444)
'dr5r7p4xb2ts'
này hoạt động tuyệt vời - cảm ơn! –
hey @DanNoble, DrTech. một trong các bạn có thể giải thích hiệu ứng của giá trị được đặt cho 'geohash_precision' khi thiết lập ánh xạ không? trong [tham chiếu] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html#_mapping_options), chúng cho biết giá trị 'Đặt độ chính xác geohash. Nó có thể được đặt thành độ dài geohash tuyệt đối hoặc giá trị khoảng cách (ví dụ: 1km, 1m, 1ml) xác định kích thước của ô nhỏ nhất. Mặc định là chiều dài tuyệt đối là 12. 'Chính xác thì kích thước của ô nhỏ nhất này có ảnh hưởng đến cụm mà chúng ta quay lại không? – kumetix
@kumetix - câu hỏi hay! xem câu hỏi cập nhật của tôi –