Giới thiệu về Tìm kiếm Địa lý trong Elasticsearch

Để tích hợp tính năng tìm kiếm địa lý vào Elasticsearch và sử dụng Google Maps API để lấy thông tin vị trí địa lý từ người dùng, bạn cần thực hiện các bước sau:

 

Cài đặt và Cấu hình Plugin GeoPoint

Elasticsearch hỗ trợ tính năng tìm kiếm địa lý thông qua plugin GeoPoint. Để cài đặt plugin này, bạn có thể sử dụng công cụ quản lý plugin Elasticsearch có sẵn.

Ví dụ, nếu bạn sử dụng Elasticsearch phiên bản 7.x, bạn có thể thực hiện lệnh sau để cài đặt plugin GeoPoint:

bin/elasticsearch-plugin install ingest-geoip

Sau khi cài đặt plugin GeoPoint, bạn cần cấu hình chỉ mục của mình để sử dụng kiểu dữ liệu "geo_point" cho trường chứa thông tin địa lý. Để làm điều này, bạn có thể chỉnh sửa mapping của chỉ mục hoặc tạo chỉ mục mới với mapping đã cấu hình.

 

Xác định Trường Địa lý trong Mapping

Thêm trường địa lý vào chỉ mục của bạn và chỉnh sửa mapping cho trường đó. Trường địa lý thường sử dụng kiểu dữ liệu "geo_point". Mapping sẽ xác định các thuộc tính và tùy chọn cho trường địa lý, chẳng hạn như độ chính xác của tọa độ, định dạng và nhiều hơn nữa.

Ví dụ:

PUT /my_locations_index
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      }
    }
  }
}

 

Chỉnh sửa Dữ liệu

Thêm thông tin vị trí địa lý vào các tài liệu của bạn. Thông thường, thông tin vị trí sẽ được biểu diễn dưới dạng cặp tọa độ kinh độ (longitude) và vĩ độ (latitude). Bạn có thể lấy thông tin vị trí này từ người dùng sử dụng Google Maps API hoặc các nguồn dữ liệu địa lý khác.

Ví dụ:

PUT /my_locations_index/_doc/1
{
  "name": "Quảng trường Ba Đình",
  "location": {
    "lat": 21.03405,
    "lon": 105.81507
  }
}

 

Thực hiện Tìm kiếm Địa lý

Bây giờ bạn đã có dữ liệu vị trí trong chỉ mục Elasticsearch. Bạn có thể thực hiện các truy vấn tìm kiếm địa lý để tìm các tài liệu gần với một vị trí cụ thể hoặc trong một phạm vi địa lý nhất định. Để thực hiện truy vấn tìm kiếm địa lý, bạn sử dụng các truy vấn tương ứng của Elasticsearch như geo_distance, geo_bounding_box, geo_polygon, v.v.

Ví dụ: Tìm các địa điểm gần với tọa độ (21.03405, 105.81507) trong bán kính 5km.

GET /my_locations_index/_search
{
  "query": {
    "geo_distance": {
      "distance": "5km",
      "location": {
        "lat": 21.03405,
        "lon": 105.81507
      }
    }
  }
}

 

Tích hợp Google Maps

Nếu bạn muốn tích hợp Google Maps với Elasticsearch để lấy thông tin vị trí địa lý từ người dùng, bạn có thể sử dụng Google Maps API để lấy tọa độ kinh độ và vĩ độ từ địa chỉ hoặc bản đồ được chọn bởi người dùng. Sau đó, bạn có thể sử dụng thông tin này để thêm dữ liệu vị trí vào chỉ mục Elasticsearch và thực hiện các truy vấn tìm kiếm địa lý.

 

Tóm lại, tích hợp Google Maps với Elasticsearch cho phép bạn sử dụng tính năng tìm kiếm địa lý trong dữ liệu của mình và đáp ứng các yêu cầu tìm kiếm dựa trên vị trí địa lý một cách chính xác và hiệu quả.