Elasticsearch

API cụm được sử dụng để lấy thông tin về cụm và các nút của nó cũng như thực hiện các thay đổi trong chúng. Để gọi API này, chúng ta cần chỉ định tên nút, địa chỉ hoặc _local.

GET /_nodes/_local

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

cluster_name" : "elasticsearch",
   "nodes" : {
      "FKH-5blYTJmff2rJ_lQOCg" : {
         "name" : "ubuntu",
         "transport_address" : "127.0.0.1:9300",
         "host" : "127.0.0.1",
         "ip" : "127.0.0.1",
         "version" : "7.0.0",
         "build_flavor" : "default",
         "build_type" : "tar",
         "build_hash" : "b7e28a7",
         "total_indexing_buffer" : 106502553,
         "roles" : [
            "master",
            "data",
            "ingest"
         ],
         "attributes" : {

Tình trạng cụm

API này được sử dụng để nhận trạng thái về tình trạng của cụm bằng cách thêm từ khóa ‘sức khỏe’.

GET /_cluster/health

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "cluster_name" : "elasticsearch",
   "status" : "yellow",
   "timed_out" : false,
   "number_of_nodes" : 1,
   "number_of_data_nodes" : 1,
   "active_primary_shards" : 7,
   "active_shards" : 7,
   "relocating_shards" : 0,
   "initializing_shards" : 0,
   "unassigned_shards" : 4,
   "delayed_unassigned_shards" : 0,
   "number_of_pending_tasks" : 0,
   "number_of_in_flight_fetch" : 0,
   "task_max_waiting_in_queue_millis" : 0,
   "active_shards_percent_as_number" : 63.63636363636363
}

Trạng thái cụm

API này được sử dụng để nhận thông tin trạng thái về một cụm bằng cách thêm URL từ khóa ‘trạng thái’. Thông tin trạng thái chứa phiên bản, nút chính, các nút khác, bảng định tuyến, siêu dữ liệu và các khối.

GET /_cluster/state

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "cluster_name" : "elasticsearch",
   "cluster_uuid" : "IzKu0OoVTQ6LxqONJnN2eQ",
   "version" : 89,
   "state_uuid" : "y3BlwvspR1eUQBTo0aBjig",
   "master_node" : "FKH-5blYTJmff2rJ_lQOCg",
   "blocks" : { },
   "nodes" : {
      "FKH-5blYTJmff2rJ_lQOCg" : {
      "name" : "ubuntu",
      "ephemeral_id" : "426kTGpITGixhEzaM-5Qyg",
      "transport
   }

Thống kê cụm

API này giúp truy xuất thống kê về cụm bằng cách sử dụng từ khóa ‘thống kê’. API này trả về số phân đoạn, kích thước lưu trữ, mức sử dụng bộ nhớ, số lượng nút, vai trò, hệ điều hành và hệ thống tệp.

GET /_cluster/stats

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

"cluster_name" : "elasticsearch",
"cluster_uuid" : "IzKu0OoVTQ6LxqONJnN2eQ",
"timestamp" : 1556435464704,
"status" : "yellow",
"indices" : {
   "count" : 7,
   "shards" : {
      "total" : 7,
      "primaries" : 7,
      "replication" : 0.0,
      "index" : {
         "shards" : {
         "min" : 1,
         "max" : 1,
         "avg" : 1.0
      },
      "primaries" : {
         "min" : 1,
         "max" : 1,
         "avg" : 1.0
      },
      "replication" : {
         "min" : 0.0,
         "max" : 0.0,
         "avg" : 0.0
      }

Cài đặt cập nhật cụm

API này cho phép bạn cập nhật cài đặt của một cụm bằng cách sử dụng từ khóa ‘cài đặt’. Có hai loại cài đặt – liên tục (áp dụng khi khởi động lại) và tạm thời (không tồn tại khi khởi động lại toàn bộ cụm).

Số liệu thống kê về nút

API này được sử dụng để truy xuất số liệu thống kê của một nút khác của cụm. Số liệu thống kê của nút gần giống như cụm.

GET /_nodes/stats

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "_nodes" : {
      "total" : 1,
      "successful" : 1,
      "failed" : 0
   },
   "cluster_name" : "elasticsearch",
   "nodes" : {
      "FKH-5blYTJmff2rJ_lQOCg" : {
         "timestamp" : 1556437348653,
         "name" : "ubuntu",
         "transport_address" : "127.0.0.1:9300",
         "host" : "127.0.0.1",
         "ip" : "127.0.0.1:9300",
         "roles" : [
            "master",
            "data",
            "ingest"
         ],
         "attributes" : {
            "ml.machine_memory" : "4112797696",
            "xpack.installed" : "true",
            "ml.max_open_jobs" : "20"
         },

Nút hot_threads

API này giúp bạn truy xuất thông tin về các luồng nóng hiện tại trên mỗi nút trong cụm.

GET /_nodes/hot_threads

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

:::{ubuntu}{FKH-5blYTJmff2rJ_lQOCg}{426kTGpITGixhEzaM5Qyg}{127.0.0.1}{127.0.0.1:9300}{ml.machine_memory=4112797696,
xpack.installed=true, ml.max_open_jobs=20}
 Hot threads at 2019-04-28T07:43:58.265Z, interval=500ms, busiestThreads=3,
ignoreIdleThreads=true:

Elasticsearch – Query DSL

Trong Elasticsearch, tìm kiếm được thực hiện bằng cách sử dụng truy vấn dựa trên JSON. Một truy vấn được tạo thành từ hai mệnh đề –

  • Điều khoản truy vấn lá – Các mệnh đề này là đối sánh, thuật ngữ hoặc phạm vi, tìm kiếm một giá trị cụ thể trong trường cụ thể.
  • Điều khoản truy vấn phức hợp – Các truy vấn này là sự kết hợp của các mệnh đề truy vấn lá và các truy vấn phức hợp khác để trích xuất thông tin mong muốn.

Elasticsearch hỗ trợ một số lượng lớn các truy vấn. Một truy vấn bắt đầu bằng một từ khóa truy vấn và sau đó có các điều kiện và bộ lọc bên trong dưới dạng đối tượng JSON. Các loại truy vấn khác nhau đã được mô tả bên dưới.

Khớp tất cả truy vấn

Đây là truy vấn cơ bản nhất; nó trả về tất cả nội dung và với số điểm là 1,0 cho mọi đối tượng.

POST /schools/_search
{
   "query":{
      "match_all":{}
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "took" : 7,
   "timed_out" : false,
   "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : 1.0,
      "hits" : [
         {
            "_index" : "schools",
            "_type" : "school",
            "_id" : "5",
            "_score" : 1.0,
            "_source" : {
               "name" : "Central School",
               "description" : "CBSE Affiliation",
               "street" : "Nagan",
               "city" : "paprola",
               "state" : "HP",
               "zip" : "176115",
               "location" : [
                  31.8955385,
                  76.8380405
               ],
               "fees" : 2200,
               "tags" : [
                  "Senior Secondary",
                  "beautiful campus"
               ],
               "rating" : "3.3"
            }
         },
         {
            "_index" : "schools",
            "_type" : "school",
            "_id" : "4",
            "_score" : 1.0,
            "_source" : {
               "name" : "City Best School",
               "description" : "ICSE",
               "street" : "West End",
               "city" : "Meerut",
               "state" : "UP",
               "zip" : "250002",
               "location" : [
                  28.9926174,
                  77.692485
               ],
               "fees" : 3500,
               "tags" : [
                  "fully computerized"
               ],
               "rating" : "4.5"
            }
         }
      ]
   }
}

Truy vấn văn bản đầy đủ

Những truy vấn này được sử dụng để tìm kiếm toàn bộ nội dung như một chương hoặc một bài báo. Truy vấn này hoạt động theo trình phân tích được liên kết với chỉ mục hoặc tài liệu cụ thể đó. Trong phần này, chúng ta sẽ thảo luận về các loại truy vấn toàn văn khác nhau.

Khớp truy vấn

Truy vấn này khớp một văn bản hoặc cụm từ với các giá trị của một hoặc nhiều trường.

POST /schools*/_search
{
   "query":{
      "match" : {
         "rating":"4.5"
      }
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "took" : 44,
   "timed_out" : false,
   "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 1,
         "relation" : "eq"
      },
      "max_score" : 0.47000363,
      "hits" : [
         {
            "_index" : "schools",
            "_type" : "school",
            "_id" : "4",
            "_score" : 0.47000363,
            "_source" : {
               "name" : "City Best School",
               "description" : "ICSE",
               "street" : "West End",
               "city" : "Meerut",
               "state" : "UP",
               "zip" : "250002",
               "location" : [
                  28.9926174,
                  77.692485
               ],
               "fees" : 3500,
               "tags" : [
                  "fully computerized"
               ],
               "rating" : "4.5"
            }
         }
      ]
   }
}

Truy vấn nhiều đối sánh

Truy vấn này khớp với một văn bản hoặc cụm từ có nhiều trường.

POST /schools*/_search
{
   "query":{
      "multi_match" : {
         "query": "paprola",
         "fields": [ "city", "state" ]
      }
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "took" : 12,
   "timed_out" : false,
   "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 1,
         "relation" : "eq"
      },
      "max_score" : 0.9808292,
      "hits" : [
         {
            "_index" : "schools",
            "_type" : "school",
            "_id" : "5",
            "_score" : 0.9808292,
            "_source" : {
               "name" : "Central School",
               "description" : "CBSE Affiliation",
               "street" : "Nagan",
               "city" : "paprola",
               "state" : "HP",
               "zip" : "176115",
               "location" : [
                  31.8955385,
                  76.8380405
               ],
               "fees" : 2200,
               "tags" : [
                  "Senior Secondary",
                  "beautiful campus"
               ],
               "rating" : "3.3"
            }
         }
      ]
   }
}

Truy vấn Chuỗi truy vấn

Truy vấn này sử dụng trình phân tích cú pháp truy vấn và từ khóa query_string.

POST /schools*/_search
{
   "query":{
      "query_string":{
         "query":"beautiful"
      }
   }
}  

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "took" : 60,
   "timed_out" : false,
   "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
      "value" : 1,
      "relation" : "eq"
   },

Truy vấn cấp độ kỳ hạn

Các truy vấn này chủ yếu xử lý dữ liệu có cấu trúc như số, ngày tháng và enums.

POST /schools*/_search
{
   "query":{
      "term":{"zip":"176115"}
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

hits" : [
   {
      "_index" : "schools",
      "_type" : "school",
      "_id" : "5",
      "_score" : 0.9808292,
      "_source" : {
         "name" : "Central School",
         "description" : "CBSE Affiliation",
         "street" : "Nagan",
         "city" : "paprola",
         "state" : "HP",
         "zip" : "176115",
         "location" : [
            31.8955385,
            76.8380405
         ],
      }
   }
] 

Truy vấn phạm vi

Truy vấn này được sử dụng để tìm các đối tượng có giá trị giữa các phạm vi giá trị đã cho. Đối với điều này, chúng ta cần sử dụng các toán tử như –

  • gte – lớn hơn bằng
  • gt – lớn hơn
  • lte – nhỏ hơn bằng
  • lt – nhỏ hơn

Ví dụ, hãy quan sát đoạn mã dưới đây:

POST /schools*/_search
{
   "query":{
      "range":{
         "rating":{
            "gte":3.5
         }
      }
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "took" : 24,
   "timed_out" : false,
   "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 1,
         "relation" : "eq"
      },
      "max_score" : 1.0,
      "hits" : [
         {
            "_index" : "schools",
            "_type" : "school",
            "_id" : "4",
            "_score" : 1.0,
            "_source" : {
               "name" : "City Best School",
               "description" : "ICSE",
               "street" : "West End",
               "city" : "Meerut",
               "state" : "UP",
               "zip" : "250002",
               "location" : [
                  28.9926174,
                  77.692485
               ],
               "fees" : 3500,
               "tags" : [
                  "fully computerized"
               ],
               "rating" : "4.5"
            }
         }
      ]
   }
}

Tồn tại các loại truy vấn cấp thuật ngữ khác, chẳng hạn như –

  • Truy vấn tồn tại – Nếu một trường nhất định có giá trị khác rỗng.
  • Truy vấn thiếu – Điều này hoàn toàn ngược lại với truy vấn tồn tại, truy vấn này tìm kiếm các đối tượng không có trường cụ thể hoặc trường có giá trị null.
  • Truy vấn ký tự đại diện hoặc regexp – Truy vấn này sử dụng biểu thức chính quy để tìm các mẫu trong các đối tượng.

Truy vấn kết hợp

Elasticsearch

Các truy vấn này là tập hợp các truy vấn khác nhau được hợp nhất với nhau bằng cách sử dụng các toán tử Boolean như và, hoặc, không hoặc cho các chỉ số khác nhau hoặc có các lệnh gọi hàm, v.v.

POST /schools/_search
{
   "query": {
      "bool" : {
         "must" : {
            "term" : { "state" : "UP" }
         },
         "filter": {
            "term" : { "fees" : "2200" }
         },
         "minimum_should_match" : 1,
         "boost" : 1.0
      }
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "took" : 6,
   "timed_out" : false,
   "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 0,
         "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
   }
}

Truy vấn địa lý

Các truy vấn này liên quan đến vị trí địa lý và điểm địa lý. Những truy vấn này giúp tìm ra trường học hoặc bất kỳ đối tượng địa lý nào khác gần bất kỳ vị trí nào. Bạn cần sử dụng kiểu dữ liệu điểm địa lý.

PUT /geo_example
{
   "mappings": {
      "properties": {
         "location": {
            "type": "geo_shape"
         }
      }
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{  "acknowledged" : true,
   "shards_acknowledged" : true,
   "index" : "geo_example"
}

Bây giờ chúng tôi đăng dữ liệu trong chỉ mục được tạo ở trên.

POST /geo_example/_doc?refresh
{
   "name": "Chapter One, London, UK",
   "location": {
      "type": "point",
      "coordinates": [11.660544, 57.800286]
   }
}

Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:

{
   "took" : 1,
   "timed_out" : false,
   "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   },
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      },
      "max_score" : 1.0,
      "hits" : [
         "_index" : "geo_example",
         "_type" : "_doc",
         "_id" : "hASWZ2oBbkdGzVfiXHKD",
         "_score" : 1.0,
         "_source" : {
            "name" : "Chapter One, London, UK",
            "location" : {
               "type" : "point",
               "coordinates" : [
                  11.660544,
                  57.800286
               ]
            }
         }
      }
   }

Elasticsearch – Mapping (Lập bản đồ) xem thêm

Để lại một bình luận