Elasticsearch

Lập bản đồ

Lập bản đồ là phác thảo của các tài liệu được lưu trữ trong một chỉ mục. Nó xác định kiểu dữ liệu như geo_point hoặc chuỗi và định dạng của các trường có trong tài liệu và quy tắc để kiểm soát ánh xạ các trường được thêm động.

PUT bankaccountdetails
{
   "mappings":{
      "properties":{
         "name": { "type":"text"}, "date":{ "type":"date"},
         "balance":{ "type":"double"}, "liability":{ "type":"double"}
      }
   }
 }

Khi chúng tôi 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" : "bankaccountdetails"
}

Các loại dữ liệu trường

Elasticsearch hỗ trợ một số kiểu dữ liệu khác nhau cho các trường trong tài liệu. Các kiểu dữ liệu được sử dụng để lưu trữ các trường trong Elasticsearch được thảo luận chi tiết tại đây.

Các loại dữ liệu cốt lõi

Đây là các kiểu dữ liệu cơ bản như văn bản, từ khóa, ngày, dài, kép, boolean hoặc ip, được hầu hết các hệ thống hỗ trợ.

Các kiểu dữ liệu phức tạp

Các kiểu dữ liệu này là sự kết hợp của các kiểu dữ liệu cốt lõi. Chúng bao gồm mảng, đối tượng JSON và kiểu dữ liệu lồng nhau. Ví dụ về kiểu dữ liệu lồng nhau được hiển thị bên dưới & dấu trừ

POST /tabletennis/_doc/1
{
   "group" : "players",
   "user" : [
      {
         "first" : "dave", "last" : "jones"
      },
      {
         "first" : "kevin", "last" : "morris"
      }
   ]
}

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

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

Một mã mẫu khác được hiển thị bên dưới

POST /accountdetails/_doc/1
{
   "from_acc":"7056443341", "to_acc":"7032460534",
   "date":"11/1/2016", "amount":10000
}

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

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

Chúng ta có thể kiểm tra tài liệu trên bằng cách sử dụng lệnh sau:

GET /accountdetails/_mappings?include_type_name=false

Loại bỏ các loại ánh xạ

Các chỉ số được tạo trong Elasticsearch 7.0.0 trở lên không còn chấp nhận ánh xạ _default_. Các chỉ số được tạo trong 6.x sẽ tiếp tục hoạt động như trước trong Elasticsearch 6.x. Các loại không được chấp nhận trong các API trong phiên bản 7.0

Elasticsearch – Phân tích

Khi một truy vấn được xử lý trong một hoạt động tìm kiếm, nội dung trong bất kỳ chỉ mục nào sẽ được phân tích bởi mô-đun phân tích. Mô-đun này bao gồm bộ phân tích, bộ tách mã, bộ lọc mã thông báo và bộ lọc bộ lọc. Nếu không có bộ phân tích nào được xác định, thì theo mặc định, các bộ phân tích, mã thông báo, bộ lọc và bộ phân tích tích hợp sẽ được đăng ký với mô-đun phân tích.

Trong ví dụ sau, chúng tôi sử dụng máy phân tích tiêu chuẩn được sử dụng khi không có máy phân tích nào khác được chỉ định. Nó sẽ phân tích câu dựa trên ngữ pháp và đưa ra các từ được sử dụng trong câu.

POST _analyze
{
   "analyzer": "standard",
   "text": "Today's weather is 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:

{
   "tokens" : [
      {
         "token" : "today's",
         "start_offset" : 0,
         "end_offset" : 7,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "weather",
         "start_offset" : 8,
         "end_offset" : 15,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "is",
         "start_offset" : 16,
         "end_offset" : 18,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 19,
         "end_offset" : 28,
         "type" : "",
         "position" : 3
      }
   ]
}

Cấu hình máy phân tích chuẩn

Chúng tôi có thể định cấu hình bộ phân tích tiêu chuẩn với các thông số khác nhau để nhận được các yêu cầu tùy chỉnh của chúng tôi.

Trong ví dụ sau, chúng tôi định cấu hình trình phân tích tiêu chuẩn để có max_token_length là 5. Đối với điều này, trước tiên chúng tôi tạo một chỉ mục với trình phân tích có tham số max_length_token.

PUT index_4_analysis
{
   "settings": {
      "analysis": {
         "analyzer": {
            "my_english_analyzer": {
               "type": "standard",
               "max_token_length": 5,
               "stopwords": "_english_"
            }
         }
      }
   }
}

Tiếp theo, chúng tôi áp dụng bộ phân tích với một văn bản như hình dưới đây. Xin lưu ý cách mã thông báo không xuất hiện vì nó có hai dấu cách ở đầu và hai dấu cách ở cuối. Đối với từ “là”, có một khoảng trắng ở đầu và một khoảng trắng ở cuối từ. Lấy tất cả chúng, nó trở thành 4 chữ cái có dấu cách và điều đó không biến nó thành một từ. Ít nhất phải có một ký tự nonspace ở đầu hoặc cuối để làm cho nó trở thành một từ được đếm.

POST index_4_analysis/_analyze
{
   "analyzer": "my_english_analyzer",
   "text": "Today's weather is 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:

Danh sách các máy phân tích khác nhau và mô tả của chúng được đưa ra trong bảng dưới đây

S.KhôngTrình phân tích & Mô tả
1Máy phân tích tiêu chuẩn (tiêu chuẩn) stopwords và cài đặt max_token_length có thể được đặt cho máy phân tích này. Theo mặc định, danh sách từ dừng trống và max_token_length là 255.
2Máy phân tích đơn giản (đơn giản) Máy phân tích này được cấu tạo bởi tokenizer chữ thường.
3Máy phân tích khoảng trắng (khoảng trắng) Bộ phân tích này bao gồm bộ tách khoảng trắng.
4Dừng máy phân tích (dừng) stopwords và stopwords_path có thể được định cấu hình. Theo mặc định, các từ dừng được khởi tạo thành các từ dừng tiếng Anh và stopwords_path chứa đường dẫn đến tệp văn bản có các từ dừng.

Tokenizers

Tokenizers được sử dụng để tạo mã thông báo từ một văn bản trong Elasticsearch. Văn bản có thể được chia nhỏ thành các mã thông báo bằng cách tính đến khoảng trắng hoặc các dấu chấm câu khác. Elasticsearch có rất nhiều công cụ phân tích mã hóa tích hợp, có thể được sử dụng trong bộ phân tích tùy chỉnh.

Dưới đây là một ví dụ về tokenizer ngắt văn bản thành các cụm từ bất cứ khi nào nó gặp một ký tự không phải là chữ cái, nhưng nó cũng viết thường tất cả các cụm từ:

POST _analyze
{
   "tokenizer": "lowercase",
   "text": "It Was a Beautiful Weather 5 Days ago."
}

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:

{
   "tokens" : [
      {
         "token" : "it",
         "start_offset" : 0,
         "end_offset" : 2,
         "type" : "word",
         "position" : 0
      },
      {
         "token" : "was",
         "start_offset" : 3,
         "end_offset" : 6,
         "type" : "word",
         "position" : 1
      },
      {
         "token" : "a",
         "start_offset" : 7,
         "end_offset" : 8,
         "type" : "word",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 9,
         "end_offset" : 18,
         "type" : "word",
         "position" : 3
      },
      {
         "token" : "weather",
         "start_offset" : 19,
         "end_offset" : 26,
         "type" : "word",
         "position" : 4
      },
      {
         "token" : "days",
         "start_offset" : 29,
         "end_offset" : 33,
         "type" : "word",
         "position" : 5
      },
      {
         "token" : "ago",
         "start_offset" : 34,
         "end_offset" : 37,
         "type" : "word",
         "position" : 6
      }
   ]
}

Danh sách các Tokenizers và mô tả của chúng được hiển thị ở đây trong bảng dưới đây

S.KhôngTokenizer & Mô tả
1Tokenizer tiêu chuẩn (tiêu chuẩn) Điều này được xây dựng dựa trên tokenizer dựa trên ngữ pháp và max_token_length có thể được định cấu hình cho tokenizer này.
2Edge NGram tokenizer (edgeNGram) Có thể đặt các cài đặt như min_gram, max_gram, token_chars cho tokenizer này.
3Keyword tokenizer (từ khóa) Điều này tạo ra toàn bộ đầu vào dưới dạng đầu ra và có thể đặt buffer_size cho việc này.
4Letter tokenizer (letter) Điều này ghi lại toàn bộ từ cho đến khi gặp một chữ cái không phải.

Elasticsearch – Modules (xem thêm)

Trả lời