1. 程式人生 > >elasticsearch之分詞器

elasticsearch之分詞器

1.概念

在elasticsearch中索引分析模組是可以通過註冊分詞器來進行配置的。分詞器的作用就是當一個文件被索引的時候,分詞器從文件中提取若干詞元(token)來支援索引的儲存和搜尋。elasticsearch內建了很多分詞器,分解器,和詞元過濾器.

索引分析模組包括:

分詞器(analyzer)

分解器(tokenizer)

詞元過濾器(token filters)


2.分詞器(包含分解器和詞元過濾器)

由一個分解器(tokenizer),零個或多個詞元過濾器(token filters)組成

①、分解器作用:

首先預處理(比如去掉html標記),分解器會有多個字元過濾器。

然後分解器是用來把字串分解成一系列的詞元

②、詞元過濾器作用:

對分解器提取出來的詞元進一步處理,比如轉大小寫,增加同義詞等。處理後的結果為索引詞(term),文件中包含幾個這樣term成為詞頻。

引擎會建立term與原文件的倒排索引。


例子:

POST http://host:port:9200/_analyze
{
“analyzer”: “standard”,
“text”: [“this is my elasticsearch”]
}

也可以這樣寫:

POST http://host:port:9200/_analyze
{
“tokenizer”: “standard”,
“filter”: [“lowercase”],
“text”: [“this is my elasticsearch”]
}

3.自定義分詞器:

PUT http://host:9200/my_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0,
    "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"]
        }
      }
    }
  }
}

測試:

POST http://host:9200/my_index/_analyze/
{
  "analyzer": "my_analyzer", 
  "text": ["The quick & brown fox"]
}

結果:
在這裡插入圖片描述