Custom Analyzer Elasticsearch

Máy phân tích tùy chỉnh (Custom Analyzer)

Khi các máy phân tích tích hợp không đáp ứng được nhu cầu của bạn, bạn có thể tạo một bộ phân tích tùy chỉnh sử dụng kết hợp thích hợp:

Cấu hình

Trình phân tích tùy chỉnh chấp nhận các tham số sau:

  • Tokenizer: Trình tạo tokenizer được cài đặt sẵn hoặc được tuỳ chỉnh (bắt buộc phải có)
  • Char Filter: Một mảng tùy chọn các bộ lọc ký tự được cài đặt sẵn hoặc tùy chỉnh.
  • Token Filter: Một mảng tùy chọn các bộ lọc thẻ được xây dựng sẵn hoặc tùy chỉnh.
  • position_increment_gap: Khi lập chỉ mục mảng văn bản, Elasticsearch chèn khoảng cách giả giữa kỳ cuối cùng của một giá trị và thời hạn đầu tiên của giá trị tiếp theo để đảm bảo rằng cụm từ truy vấn không khớp với hai thuật ngữ từ các phần tử mảng khác nhau. Mặc định là 100. Xem thêm position_increment_gap

Một vài ví dụ về Custon Analyzer

Ví dụ 1:

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type":      "custom",
          "tokenizer": "standard",
          "char_filter": [
            "html_strip"
          ],
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "Is this <b>déjà vu</b>?"
}

Ví dụ này cho biết điều khoản sau đây:

[ is, this, deja, vu ]

Và khi chúng ta gõ 1 trong những từ trên thì kết quả sẽ được trả về

Ví dụ 2

Ở ví dụ trước ta sử dụng những bộ lọc kí tự, bộ lọc token và tokenizer mặc định có sẵn của elasticsearch. Ví dụ này chúng ta sẽ tìm hiểu 1 ví dụ mà sử dụng những bộ lọc được custom.

Dưới đây là cách cấu hình

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "char_filter": [
            "emoticons" 
          ],
          "tokenizer": "punctuation", 
          "filter": [
            "lowercase",
            "english_stop" 
          ]
        }
      },
      "tokenizer": {
        "punctuation": { 
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      "char_filter": {
        "emoticons": { 
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {
        "english_stop": { 
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text":     "I'm a :) person, and you?"
}

Và kết quả sẽ thu về các điều luật sau đây:

[ i'm, _happy_, person, you ]

Còn rất nhiều cấu hình khác có thể tủy chỉnh theo ý mình mọi người có thể xem thêm tại Custom Analyzer


All Rights Reserved