Tìm hiểu Elasticsearch – Custom Analyzers

Custom Analyzers

Elasticsearch cho phép chung ta có thể tạo ra custom analyzers bao gồm character filters, tokenizers, vàtoken filters mà có thể phù hơp với dữ liệu và mục đích riêng

Trong

Analysis and Analyzers, chúng ta nói rằng 1 analyzer bao gồm 3 functions

Character filters

Character filters sử dụng để dọn dẹp một string trước khi chúng được  tokenized.

Một analyzercó thể có  chiều character filter hoặc không.

Tokenizers

 Một analyzer phải có 1 tokenizer.  Tokenizer bẻ nhỏ string thành những terms (từ) riêng biệt hoặc token riếng biệt. Có 1 chuẩn tokenizer mà xóa bỏ các dấu cách, dâu ngăn  và loại bỏ hầu hết các dấu chấm câu

Token filters

Sau khi tokenization,kêt quả token stream được thông qua bất cứ bộ lọc nào????

Token filters có thể thay đổi thêm mới hoặc xóa bỏ tokens.

Creating a Custom Analyzer

Thay đổi trong analysis để Custom Analyzer:

PUT /my_index

{
    "settings": {
        "analysis": {
            "char_filter": { ... custom character filters ... },
            "tokenizer":   { ...    custom tokenizers     ... },
            "filter":      { ...   custom token filters   ... },
            "analyzer":    { ...    custom analyzers      ... }
        }
    }
}
  1. html_strip character filter.
  2. Thay thế ký tự & thành" and ", sử dụng bộ lọc mapping :
"char_filter": {
    "&_to_and": {
        "type":       "mapping",
        "mappings": [ "&=> and "]
    }
}
  1. Tokenize các từ, sử dụng chuẩn standard tokenizer.
  2. Lowercase terms, using the lowercase token filter.
  3. Xóa bỏ các từ trong stopwords, sử dụng stop token filter:
"filter": {
    "my_stopwords": {
        "type":        "stop",
        "stopwords": [ "the", "a" ]
    }
}
"analyzer": {
    "my_analyzer": {
        "type":           "custom",
        "char_filter":  [ "html_strip", "&_to_and" ],
        "tokenizer":      "standard",
        "filter":       [ "lowercase", "my_stopwords" ]
    }
}

PUT /my_index

{
    "settings": {
        "analysis": {
            "char_filter": {
                "&_to_and": {
                    "type":       "mapping",
                    "mappings": [ "&=> and "]
            }},
            "filter": {
                "my_stopwords": {
                    "type":       "stop",
                    "stopwords": [ "the", "a" ]
            }},
            "analyzer": {
                "my_analyzer": {
                    "type":         "custom",
                    "char_filter":  [ "html_strip", "&_to_and" ],
                    "tokenizer":    "standard",
                    "filter":       [ "lowercase", "my_stopwords" ]
            }}
}}}

Kiểm tra kết quả sau khi setup analyzer: GET /my_index/_analyze

{
    "text": "The quick & brown fox",
    "analyzer": "my_analyzer"
}

Kết quả trả về là các tokens như sau:

{
  "tokens" : [
      { "token" :   "quick",    "position" : 2 },
      { "token" :   "and",      "position" : 3 },
      { "token" :   "brown",    "position" : 4 },
      { "token" :   "fox",      "position" : 5 }
    ]
}

PUT /my_index/_mapping/my_type

{
    "properties": {
        "title": {
            "type":      "string",
            "analyzer":  "my_analyzer"
        }
    }
}

Cám ơn mọi người đã đọc bài viết này, bài viết còn sơ sài mong mọi người thông cảm Mình sẽ cố gắng tìm hiểu kỹ hơn trong bài viết xong

Thank you ^_^


All Rights Reserved