es之分詞器和分析器


Elasticsearch這種全文搜索引擎,會用某種算法對建立的文檔進行分析,從文檔中提取出有效信息(Token)

對於es來說,有內置的分析器(Analyzer)和分詞器(Tokenizer)

1:分析器

ES內置分析器

standard 分析器划分文本是通過詞語來界定的,由Unicode文本分割算法定義。它刪除大多數標點符號,將詞語轉換為小寫(就是按照空格進行分詞)
simple 分析器每當遇到不是字母的字符時,將文本分割為詞語。它將所有詞語轉換為小寫。
keyword 可以接受任何給定的文本,並輸出與單個詞語相同的文本
pattern 分析器使用正則表達式將文本拆分為詞語,它支持小寫和停止字
language 語言分析器
whitespace (空白)分析器每當遇到任何空白字符時,都將文本划分為詞語。它不會將詞語轉換為小寫
custom 自定義分析器

測試simple Analyzer:

POST _analyze
{
 "analyzer": "simple",
 "text": "today is 2018year 5month 1day."
}

custom(自定義)分析器接受以下的參數:

tokenizer 內置或定制的標記器(也就是需要使用哪種分析器)。<br/>(需要)
char_filter 內置或自定義字符過濾器的可選陣列。
filter 可選的內置或定制token過濾器陣列。
position_increment_gap 在索引文本值數組時,Elasticsearch會在一個詞的最后一個位置和下一個詞的第一個位置之間插入“間隙”,以確保短語查詢與不同數組元素的兩個術語不匹配。 默認為100.有關更多信息

測試:

PUT /my_index/groups/1
{
   "names": [ "John Abraham", "Lincoln Smith"]
}

做一下普通查詢:

GET /my_index/groups/_search
{
   "query": {
       "match_phrase": {
           "names": "Abraham Lincoln"
      }
  }
}

然后刪除索引,重新添加:

PUT my_index
{
 "mappings": {
   "my_type": {
     "properties": {
       "names": {
         "type": "text",
         "position_increment_gap": 0
      }
    }
  }
}
}

然后倒入數據:

PUT /my_index/groups/1
{
   "names": [ "John Abraham", "Lincoln Smith"]
}

在做查詢操作:

GET /my_index/groups/_search
{
   "query": {
       "match_phrase": {
           "names": "Abraham Lincoln"
      }
  }
}

2:更新分析器

1:要先關閉索引

2:添加分析器

3:打開索引

1、 關閉索引

POST my_index/_close

2、 添加分析器

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

3、打開索引

POST my_index/_open

4、測試:

POST my_index/_analyze
{
 "analyzer": "my_custom_analyzer",
 "text": "Is this <b>網頁 </b>?"
}

3:分詞器

Es中也支持非常多的分詞器

Standard 默認的分詞器根據 Unicode 文本分割算法,以單詞邊界分割文本。它刪除大多數標點符號。<br/>它是大多數語言的最佳選擇
Letter 遇到非字母時分割文本
Lowercase 類似 letter ,遇到非字母時分割文本,同時會將所有分割后的詞元轉為小寫
Whitespace 遇到空白字符時分割位文本

Standard例子:

POST _analyze
{
 "tokenizer": "standard",
 "text": "this is standard tokenizer!!!!."
}

Letter例子:

POST _analyze
{
 "tokenizer": "letter",
 "text": "today is 2018year-05month"
}

Whitespace例子:

POST _analyze
{
 "tokenizer": "whitespace",
 "text": "this is t es t."
}

4:更新分詞器

我們在創建索引之后可以添加分詞器,比如想要按照空格的方式進行分詞

【注意】

添加分詞器步驟:

1:要先關閉索引

2:添加分詞器

3:打開索引

POST school/_close

PUT school/_settings
{
"analysis" :
{
  "analyzer" :
  {
    "content" : {"type" : "custom" , "tokenizer" : "whitespace"}
  }
}
}

POST school/_open

獲取索引的配置:

索引中包含了非常多的配置參數,我們可以通過命令進行查詢

GET school/_settings

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM