+7

Elasticsearch Zero to Hero #3 - Tạo index trong Elasticsearch từ cơ bản đến nâng cao

Qua phần #2 Cơ chế hoạt động của Elasticsearch, chúng ta đã hiểu về các khái niệm cơ bản, cũng như cơ chế hoạt động của Elasticsearch. Tại phần này chúng ta sẽ bắt đầu tạo index trong Elasticsearch từ cơ bản đến nâng cao.

#3 này sẽ có 3 phần chính:

A. Tạo Index cơ bản

B. Tạo Index nâng cao hơn

C. Xem dữ liệu trên Kibana

Bắt đầu thôi!

A. Tạo Index cơ bản

Phiên bản mình sử dụng ở đây là Elasticsearch 7.10 nhé.

1. Tạo Index mới

Chúng ta sẽ bắt đầu từ việc tạo Index là student

PUT http://localhost:9200/student

Response thông báo tạo thành công

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

2. Thêm document vào Index

Bây giờ truyền dữ liệu về profile của học sinh vào trong index.

  • Họ tên: Nguyễn Văn A
  • Năm sinh: 1996

Elasticsearch hỗ trợ rất nhiều kiểu để add json document, ví dụ như:

  • PUT /<target>/_doc/<_id>
  • POST /<target>/_doc/
  • PUT /<target>/_create/<_id>
  • POST /<target>/_create/<_id>

Ở đây mình chọn cách thứ 2:

Request

POST http://localhost:9200/student/_doc
{
  "name": "Nguyễn Văn A",
  "yob": 1996
}

Response thông báo thêm thành công:

{
 "_index": "student",
 "_type": "_doc",
 "_id": "w6KLYYcBFS9gH851mPbM",
 "_version": 1,
 "result": "created",
 "_shards": {
   "total": 2,
   "successful": 1,
   "failed": 0
 },
 "_seq_no": 0,
 "_primary_term": 1
}

3. Mapping

Dừng lại một chút để xem xét lại index chúng ta vừa tạo chút nhé.

Đối với SQL, các trường dữ liệu thường cần khai báo data type (INT, VARCHAR, TEXT,...), vây liệu Elasticsearch có không? Liệu name, yob của chúng ta lưu vào sẽ có data type thế nào?

Chúng ta sẽ kiểm tra như thế này:

Request

GET http://localhost:9200/student/_mapping

Response trả về:

{
  "student": {
    "mappings": {
      "properties": {
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "yob": {
          "type": "long"
        }
      }
    }
  }
}

Mỗi document là tập hợp các field, mỗi field có kiểu dữ liệu riêng của mình. Mapping là quá trình xác định cách document và field được lưu trữ (stored) và đánh chỉ mục (indexed). Trường hợp trên name có type là text, và yob là long.

Giả sử bây giờ add thêm document mới mà yob không phải số (1996), mà là chữ ("1996") liệu có được không? Mình thử nhé!

Request

POST http://localhost:9200/student/_doc
{
  "name": "Nguyễn Thanh B",
  "yob": "1996"
}

Kết quả là vẫn tạo thành công! Còn data type vẫn là long không thay đổi.

Kiểm tra lại 2 documents vừa được add vào index nào:

Request

curl -X GET \
  'http://localhost:9200/student/_search' \
  --header 'Accept: */*' \
  --header 'Content-Type: application/json' \
  --data-raw '{}'

Response trả về:

Dữ liệu chúng ta add vào được nằm trong phần _source

{
 "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": "student",
       "_type": "_doc",
       "_id": "w6KLYYcBFS9gH851mPbM",
       "_score": 1.0,
       "_source": {
         "name": "Nguyễn Văn A",
         "yob": 1996
       }
     },
     {
       "_index": "student",
       "_type": "_doc",
       "_id": "xKKaYYcBFS9gH8513_ZV",
       "_score": 1.0,
       "_source": {
         "name": "Nguyễn Thanh B",
         "yob": "1996"
       }
     }
   ]
 }
}

Vậy chúng ta có thể rút nhanh ra rằng, đối với Elasticsearch, khi đẩy dữ liệu vào mà chưa khai báo data type, trường thông tin đó sẽ được Elasticsearch tự gắn data type phù hợp, và dữ liệu về sau được add vào cũng không làm thay đổi data type.

Hay nói cách khác, những filed được index sẽ không thể thay đổi được mapping. Vì vậy, xác định định dạng của dữ liệu truyền vào cũng là yêu cầu rất quan trọng.

Bảng sau đây là base types mà chúng ta nên nắm được để có thể áp dụng:

image.png

4. Settings

Ở phần #2 của series, chúng ta được biết về shard trong Elasticsearch rồi, vậy các bạn có nhìn ra được index student này của chúng ta được chia shard và replica như thế nào không? Thử đoán trong 5s và cùng kiểm tra nhé.

Request

GET http://localhost:9200/student/_settings

Response trả về:

{
 "student": {
   "settings": {
     "index": {
       "routing": {
         "allocation": {
           "include": {
             "_tier_preference": "data_content"
           }
         }
       },
       "number_of_shards": "1",
       "provided_name": "student",
       "creation_date": "1680968217412",
       "number_of_replicas": "1",
       "uuid": "nd_Qqgp0QiGukeHbxTeAbw",
       "version": {
         "created": "7100099"
       }
     }
   }
 }
}

Như vậy câu trả lời chính là:

  • number_of_shards: 1
  • number_of_replicas: 1

Đây là cấu hình mặc định của Elasticsearch mà chúng ta đang sử dụng.

B. Tạo Index nâng cao hơn

Đi đến đây có vẻ chúng ta đã hiểu hơn về cách khởi tạo Index mới rồi. Mình sẽ tổng hợp lại giúp mọi người cách bước để tạo Index mới nhé.

  1. Chuẩn bị dữ liệu
  2. Tạo Index trống với Mapping, Setting theo nhu cầu
  3. Thêm dữ liệu

Bắt đầu thôi!

1. Chuẩn bị dữ liệu

Thực ra có nhiều cách add dữ liệu vào Elasticsearch, ở đây mình sẽ dùng qua Bulk API như đã giới thiệu từ trước để mọi người dễ dàng tiếp cận.

Ở đây mình sẽ sử dụng dữ liệu ngân hàng từ trang https://bankervn.com/danh-sach-ngan-hang/ nhé. Các thông tin đưa vào Elasticsearch sẽ là:

  • BankName: Tên Ngân hàng
  • ShortName: Tên viết tắt
  • FoundingDate: Ngày thành lập
  • CharterCapital: Vốn điều lệ (Đơn vị: Tỷ đồng)
BankName ShortName FoundingDate CharterCapital
Việt Nam Thịnh Vượng VPBank 1993-08-12 67434.23
Đầu tư và Phát triển Việt Nam BIDV 1957-04-26 50585.20
... ... ... ...

2. Tạo Index trống

Mình sẽ tạo index là bank-index. Vận dụng những gì đã tìm hiểu, bây giờ chúng ta sẽ cấu hình với yêu cầu như sau:

  • Shard: 3, Replica: 2 (Khuyên dùng Replica = Shard - 1)

  • Properties :

    • BankName (TEXT): Standard Tokenizer (filter: asciifolding, lowercase, html strip)
    • ShortName (TEXT): Keyword Tokenizer (filter: asciifolding, lowercase, html strip)
    • FoundingDate (DATE): Format yyyy-MM-dd
    • CharterCapital (LONG)

    Đối với việc Tokenizer thì thực sự để giải thích khi chưa thực hành hơi khó hiểu, mình sẽ giới thiệu lại nhanh vì sao mình chọn như vậy. Đối với ShortName, cũng không khác gì ID nên mình muốn giữ nguyên là 1 term duy nhất, sử dụng Keyword Tokenizer. Còn BankName là đoạn text như bình thường nên dùng mặc định là Standard Tokenizer.

    Các Filter sử dụng thêm có asciifolding (bỏ dấu tiếng việt), lowercase (chuyển viết hoa về viết thường), html strip (bỏ ký hiệu html)

Request:

curl -X PUT \
  'http://localhost:9200/bank-index' \
  --header 'Accept: */*' \
  --header 'Content-Type: application/json' \
  --data-raw '{
      "settings": {
        "index": {
            "number_of_shards": 3,
            "number_of_replicas": 2,
            "analysis": {
                "analyzer": {
                    "my_standard_analyzer": {
                        "filter": [
                            "asciifolding",
                            "lowercase"
                        ],
                        "char_filter": [
                            "html_strip"
                        ],
                        "tokenizer": "standard"
                    },
                    "my_keyword_analyzer": {
                        "filter": [
                            "asciifolding",
                            "lowercase"
                        ],
                        "char_filter": [
                            "html_strip"
                        ],
                        "tokenizer": "keyword"
                    }
                }
            }

        }
      },
    "mappings": {
					"properties": {
						"BankName": {
							"type": "text",
							"analyzer": "my_standard_analyzer"
						},
						"ShortName":{ 
						  "type": "text",
							"analyzer": "my_keyword_analyzer"
						},
						"FoundingDate": {
							"type": "date",
							"format": "yyyy-MM-dd"
						},
						"CharterCapital": { "type": "long"}
					}
				}
}'

Response trả về:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "bank-index"
}

Để chắc chắn hơn, chúng ta sẽ kiểm tra lại lần nữa.

Request:

GET http://localhost:9200/bank-index/  

Response trả về:

{{
  "bank-index": {
    "aliases": {},
    "mappings": {
      "properties": {
        "BankName": {
          "type": "text",
          "analyzer": "my_standard_analyzer"
        },
        "CharterCapital": {
          "type": "long"
        },
        "FoundingDate": {
          "type": "date",
          "format": "yyyy-MM-dd"
        },
        "ShortName": {
          "type": "text",
          "analyzer": "my_keyword_analyzer"
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "3",
        "provided_name": "bank-index",
        "creation_date": "1681142796902",
        "analysis": {
          "analyzer": {
            "my_keyword_analyzer": {
              "filter": [
                "asciifolding",
                "lowercase"
              ],
              "char_filter": [
                "html_strip"
              ],
              "tokenizer": "keyword"
            },
            "my_standard_analyzer": {
              "filter": [
                "asciifolding",
                "lowercase"
              ],
              "char_filter": [
                "html_strip"
              ],
              "tokenizer": "standard"
            }
          }
        },
        "number_of_replicas": "2",
        "uuid": "W_vTTTi1SGawFEdOA-NxFA",
        "version": {
          "created": "7100099"
        }
      }
    }
  }
}

Rất đơn giản phải không nào?

3. Thêm dữ liệu

Việc thêm dữ liệu vào Index có nhiều cách, đối với dữ liệu lớn mình thường hay sử dụng elasticdump. Tuy nhiên ở bài giới thiệu này, mình sẽ tiếp tục Bulk API đã giới thiệu ở #2 cho đơn giản.

Vì vậy nên mình đã chuẩn hóa lại dữ liệu như dưới đây:

{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Nam Thịnh Vượng", "ShortName": "VPBank", "FoundingDate": "1993-08-12", "CharterCapital": 67434.23}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đầu tư và Phát triển Việt Nam", "ShortName": "BIDV", "FoundingDate": "1957-04-26", "CharterCapital": 50585.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Công thương Việt Nam", "ShortName": "VietinBank", "FoundingDate": "1988-03-26", "CharterCapital": 48057.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Ngoại Thương Việt Nam", "ShortName": "Vietcombank", "FoundingDate": "1963-04-01", "CharterCapital": 47325.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Quân Đội", "ShortName": "MB", "FoundingDate": "1994-11-04", "CharterCapital": 37783.21}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Kỹ Thương", "ShortName": "Techcombank", "FoundingDate": "1993-09-27", "CharterCapital": 35109.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "NN&PT Nông thôn Việt Nam", "ShortName": "Agribank", "FoundingDate": "1988-03-26", "CharterCapital": 34351.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Á Châu", "ShortName": "ACB", "FoundingDate": "1993-06-04", "CharterCapital": 27019.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn – Hà Nội", "ShortName": "SHB", "FoundingDate": "1993-11-13", "CharterCapital": 26673.70}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Quốc Tế", "ShortName": "VIB", "FoundingDate": "1996-09-18", "CharterCapital": 21076.73}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Phát triển Thành phố Hồ Chí Minh", "ShortName": "HDBank", "FoundingDate": "1990-01-04", "CharterCapital": 20272.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đông Nam Á", "ShortName": "SeABank", "FoundingDate": "1994-03-24", "CharterCapital": 19809.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Chính sách xã hội Việt Nam", "ShortName": "VBSP", "FoundingDate": "2002-10-04", "CharterCapital": 19022.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn Thương Tín", "ShortName": "Sacombank", "FoundingDate": "1991-12-21", "CharterCapital": 18852.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Bưu điện Liên Việt", "ShortName": "LienVietPostBank", "FoundingDate": "2008-03-28", "CharterCapital": 17291.05}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Hàng Hải", "ShortName": "MSB", "FoundingDate": "1991-07-12", "CharterCapital": 15275.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn", "ShortName": "SCB", "FoundingDate": "2012-01-01", "CharterCapital": 15231.70}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Phát triển Việt Nam", "ShortName": "VDB", "FoundingDate": "2006-05-19", "CharterCapital": 15085.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Phương Đông", "ShortName": "OCB", "FoundingDate": "1996-06-10", "CharterCapital": 13698.82}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Xuất Nhập Khẩu", "ShortName": "Eximbank", "FoundingDate": "1989-05-24", "CharterCapital": 12355.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Tiên Phong", "ShortName": "TPBank", "FoundingDate": "2008-05-05", "CharterCapital": 11716.70}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đại Chúng Việt Nam", "ShortName": "PVcomBank", "FoundingDate": "2013-09-16", "CharterCapital": 9000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "TMCP Bắc Á", "ShortName": "BacABank", "FoundingDate": "1994-09-01", "CharterCapital": 8133.86}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Woori Việt Nam", "ShortName": "Woori", "FoundingDate": "2016-10-31", "CharterCapital": 7700.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "HSBC Việt Nam", "ShortName": "HSBC", "FoundingDate": "2008-09-08", "CharterCapital": 7528.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Standard Chartered Việt Nam", "ShortName": "SCBVL", "FoundingDate": "2008-09-08", "CharterCapital": 6954.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Public Bank Việt Nam", "ShortName": "PBVN", "FoundingDate": "2016-03-24", "CharterCapital": 6000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "An Bình", "ShortName": "ABBANK", "FoundingDate": "1993-05-13", "CharterCapital": 5713.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Shinhan Việt Nam", "ShortName": "SHBVN", "FoundingDate": "2008-12-29", "CharterCapital": 5709.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Quốc dân", "ShortName": "NCB", "FoundingDate": "1995-09-18", "CharterCapital": 5601.55}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Á", "ShortName": "VietABank", "FoundingDate": "2003-07-04", "CharterCapital": 5399.60}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đông Á", "ShortName": "DongABank", "FoundingDate": "1992-07-01", "CharterCapital": 5000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "UOB Việt Nam", "ShortName": "UOB", "FoundingDate": "2017-09-21", "CharterCapital": 5000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Nam Thương Tín", "ShortName": "Vietbank", "FoundingDate": "2007-02-02", "CharterCapital": 4776.80}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Nam Á", "ShortName": "NamABank", "FoundingDate": "1992-10-21", "CharterCapital": 4564.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "ANZ Việt Nam", "ShortName": "ANZVL", "FoundingDate": "2008-10-09", "CharterCapital": 4511.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đại Dương", "ShortName": "OceanBank", "FoundingDate": "1993-12-30", "CharterCapital": 4000.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "CIMB Việt Nam", "ShortName": "CIMB", "FoundingDate": "2016-08-31", "CharterCapital": 3698.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Bản Việt", "ShortName": "VietCapitalBank", "FoundingDate": "1992-12-25", "CharterCapital": 3670.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Kiên Long", "ShortName": "Kienlongbank", "FoundingDate": "1995-10-27", "CharterCapital": 3653.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Indovina", "ShortName": "IVB", "FoundingDate": "1990-01-21", "CharterCapital": 3377.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Bảo Việt", "ShortName": "BAOVIETBank", "FoundingDate": "2009-01-14", "CharterCapital": 3150.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn Công Thương", "ShortName": "SAIGONBANK", "FoundingDate": "1987-10-16", "CharterCapital": 3080.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Hợp tác xã Việt Nam", "ShortName": "Co-opBank", "FoundingDate": "2013-07-01", "CharterCapital": 3029.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Dầu khí toàn cầu", "ShortName": "GPBank", "FoundingDate": "1993-11-13", "CharterCapital": 3018.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Nga", "ShortName": "VRB", "FoundingDate": "2006-11-19", "CharterCapital": 3008.40}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Xây dựng", "ShortName": "CB", "FoundingDate": "1989-09-01", "CharterCapital": 3000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Xăng dầu Petrolimex", "ShortName": "PGBank", "FoundingDate": "1993-11-13", "CharterCapital": 3000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Hong Leong Việt Nam", "ShortName": "HLBVN", "FoundingDate": "2008-12-29", "CharterCapital": 3000.00}

Dạng dữ liệu này Elasticsearch mô tả rằng nó là "The actions are specified in the request body using a newline delimited JSON (NDJSON) structure". Nôm na là 1 dòng khai báo action và 1 dòng dữ liệu.

image.png

Dông dài mãi cũng đến bước cuối cùng, chúng ta truyền dữ liệu vào Elasticsearch thôi!

Request:

curl -X POST \
  'http://localhost:9200/_bulk' \
  --header 'Content-Type: application/json' \
  --data-raw '{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Nam Thịnh Vượng", "ShortName": "VPBank", "FoundingDate": "1993-08-12", "CharterCapital": 67434.23}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đầu tư và Phát triển Việt Nam", "ShortName": "BIDV", "FoundingDate": "1957-04-26", "CharterCapital": 50585.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Công thương Việt Nam", "ShortName": "VietinBank", "FoundingDate": "1988-03-26", "CharterCapital": 48057.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Ngoại Thương Việt Nam", "ShortName": "Vietcombank", "FoundingDate": "1963-04-01", "CharterCapital": 47325.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Quân Đội", "ShortName": "MB", "FoundingDate": "1994-11-04", "CharterCapital": 37783.21}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Kỹ Thương", "ShortName": "Techcombank", "FoundingDate": "1993-09-27", "CharterCapital": 35109.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "NN&PT Nông thôn Việt Nam", "ShortName": "Agribank", "FoundingDate": "1988-03-26", "CharterCapital": 34351.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Á Châu", "ShortName": "ACB", "FoundingDate": "1993-06-04", "CharterCapital": 27019.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn – Hà Nội", "ShortName": "SHB", "FoundingDate": "1993-11-13", "CharterCapital": 26673.70}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Quốc Tế", "ShortName": "VIB", "FoundingDate": "1996-09-18", "CharterCapital": 21076.73}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Phát triển Thành phố Hồ Chí Minh", "ShortName": "HDBank", "FoundingDate": "1990-01-04", "CharterCapital": 20272.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đông Nam Á", "ShortName": "SeABank", "FoundingDate": "1994-03-24", "CharterCapital": 19809.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Chính sách xã hội Việt Nam", "ShortName": "VBSP", "FoundingDate": "2002-10-04", "CharterCapital": 19022.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn Thương Tín", "ShortName": "Sacombank", "FoundingDate": "1991-12-21", "CharterCapital": 18852.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Bưu điện Liên Việt", "ShortName": "LienVietPostBank", "FoundingDate": "2008-03-28", "CharterCapital": 17291.05}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Hàng Hải", "ShortName": "MSB", "FoundingDate": "1991-07-12", "CharterCapital": 15275.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn", "ShortName": "SCB", "FoundingDate": "2012-01-01", "CharterCapital": 15231.70}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Phát triển Việt Nam", "ShortName": "VDB", "FoundingDate": "2006-05-19", "CharterCapital": 15085.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Phương Đông", "ShortName": "OCB", "FoundingDate": "1996-06-10", "CharterCapital": 13698.82}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Xuất Nhập Khẩu", "ShortName": "Eximbank", "FoundingDate": "1989-05-24", "CharterCapital": 12355.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Tiên Phong", "ShortName": "TPBank", "FoundingDate": "2008-05-05", "CharterCapital": 11716.70}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đại Chúng Việt Nam", "ShortName": "PVcomBank", "FoundingDate": "2013-09-16", "CharterCapital": 9000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "TMCP Bắc Á", "ShortName": "BacABank", "FoundingDate": "1994-09-01", "CharterCapital": 8133.86}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Woori Việt Nam", "ShortName": "Woori", "FoundingDate": "2016-10-31", "CharterCapital": 7700.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "HSBC Việt Nam", "ShortName": "HSBC", "FoundingDate": "2008-09-08", "CharterCapital": 7528.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Standard Chartered Việt Nam", "ShortName": "SCBVL", "FoundingDate": "2008-09-08", "CharterCapital": 6954.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Public Bank Việt Nam", "ShortName": "PBVN", "FoundingDate": "2016-03-24", "CharterCapital": 6000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "An Bình", "ShortName": "ABBANK", "FoundingDate": "1993-05-13", "CharterCapital": 5713.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Shinhan Việt Nam", "ShortName": "SHBVN", "FoundingDate": "2008-12-29", "CharterCapital": 5709.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Quốc dân", "ShortName": "NCB", "FoundingDate": "1995-09-18", "CharterCapital": 5601.55}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Á", "ShortName": "VietABank", "FoundingDate": "2003-07-04", "CharterCapital": 5399.60}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đông Á", "ShortName": "DongABank", "FoundingDate": "1992-07-01", "CharterCapital": 5000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "UOB Việt Nam", "ShortName": "UOB", "FoundingDate": "2017-09-21", "CharterCapital": 5000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Nam Thương Tín", "ShortName": "Vietbank", "FoundingDate": "2007-02-02", "CharterCapital": 4776.80}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Nam Á", "ShortName": "NamABank", "FoundingDate": "1992-10-21", "CharterCapital": 4564.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "ANZ Việt Nam", "ShortName": "ANZVL", "FoundingDate": "2008-10-09", "CharterCapital": 4511.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Đại Dương", "ShortName": "OceanBank", "FoundingDate": "1993-12-30", "CharterCapital": 4000.10}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "CIMB Việt Nam", "ShortName": "CIMB", "FoundingDate": "2016-08-31", "CharterCapital": 3698.20}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Bản Việt", "ShortName": "VietCapitalBank", "FoundingDate": "1992-12-25", "CharterCapital": 3670.90}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Kiên Long", "ShortName": "Kienlongbank", "FoundingDate": "1995-10-27", "CharterCapital": 3653.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Indovina", "ShortName": "IVB", "FoundingDate": "1990-01-21", "CharterCapital": 3377.50}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Bảo Việt", "ShortName": "BAOVIETBank", "FoundingDate": "2009-01-14", "CharterCapital": 3150.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Sài Gòn Công Thương", "ShortName": "SAIGONBANK", "FoundingDate": "1987-10-16", "CharterCapital": 3080.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Hợp tác xã Việt Nam", "ShortName": "Co-opBank", "FoundingDate": "2013-07-01", "CharterCapital": 3029.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Dầu khí toàn cầu", "ShortName": "GPBank", "FoundingDate": "1993-11-13", "CharterCapital": 3018.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Việt Nga", "ShortName": "VRB", "FoundingDate": "2006-11-19", "CharterCapital": 3008.40}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Xây dựng", "ShortName": "CB", "FoundingDate": "1989-09-01", "CharterCapital": 3000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Xăng dầu Petrolimex", "ShortName": "PGBank", "FoundingDate": "1993-11-13", "CharterCapital": 3000.00}
{ "index" : { "_index" : "bank-index" } }
{"BankName": "Hong Leong Việt Nam", "ShortName": "HLBVN", "FoundingDate": "2008-12-29", "CharterCapital": 3000.00}

'

Response 200 OK

Lưu ý: Nếu bạn nào bị lỗi 400 Bad Request, "reason": "The bulk request must be terminated by a newline [\n]" thì mọi người kiểm tra và "Enter" để thêm 1 dòng dưới data raw nhé, để theo đúng format \n của Elasticsearch.

Kkiểm tra lại dữ liệu xem đã vào chưa nhé! Request:

curl -X GET \
  'http://localhost:9200/bank-index/_search' \
  --header 'Accept: */*' \
  --header 'User-Agent: Thunder Client (https://www.thunderclient.com)' \
  --header 'Content-Type: application/json' \
  --data-raw '{}'

Response trả về nếu có "hits": { "total": { "value": 49,...} thì chúc mừng, chúng ta đã thêm dữ liệu thành công.

C. Xem dữ liệu trên Kibana

#1 ta đã cài Kibana nhưng đến giờ mới có dịp sử dụng. Nếu ai đã quên thì đường dẫn tới Kibana đã cài là: http://localhost:5601/app/home#/

Lúc mới vào mọi người đã thấy màn hình như thế này: image.png

Mọi người chọn Explore on my own sẽ thấy hiển thị màn hình chính:

image.png

Ở thanh menu, mọi người kéo xuống dưới cùng và làm theo các bước sau:

  1. Click Stack Management (trong phần Management)

    image.png

  2. Ở thanh menu mới, click Index Patterns (trong phần Kibana)

image.png

  1. Click vào nút Create index pattern ngay giữa màn hình
  2. Điền "bank-index" vào Step 1 of 2 và Next step

image.png

  1. Ở Time field chọn "I don't want to use the time filter" và Create index pattern

image.png

  1. Click Hamburger Menu Icon (cho ai chưa biết là icon menu hình 3 dấu gạch ngang), chọn Discover

    image.png

Ta-da, thông tin về bank-index đã hiển thị lên, với số lượng documents là 49 hits.

image.png

Đều là dân công nghệ nên chắc hẳn đến đây không có gì các bạn ngồi thử Kibana rồi.

Hẹn gặp mọi người ở phần 4, để chúng ta bắt đầu đi vào phần quan trọng nhất của Elasticsearch, đó tất nhiên chính là Search. See ya!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.