Eelasticsearch 多字段特性及 Mapping 中配置自定義 Analyzer詳解

多字段特性

1.廠家名字實現精確匹配

  • 增加一個 keyword 字段

2.使用不同的 analyzer

  • 不同語言
  • pinyin 字段的搜索
  • 還支持爲搜索和索引指定不同的 analyzer
    在這裏插入圖片描述

Excat values v.s Full Text

  • Excat Values :包括數字 / 日期 / 具體一個字符串 (例如 「Apple Store」)
    Elasticsearch 中的 keyword
  • 全文本,非結構化的文本數據
    Elasticsearch 中的 text
    在這裏插入圖片描述

Excat values不需要分詞

Elaticsearch 爲每一個字段創建一個倒排索引
Exact Value 在索引時,不需要做特殊的分詞處理

在這裏插入圖片描述

自定義分詞

當 Elasticsearch 自帶的分詞器無法滿足時,可以自定義分詞器。通過自組合不同的組件實現:

  • Character Filter
  • Tokenizer
  • Token Filter

Character Filters

Tokenizer 之前對文本進行處理,例如增加刪除及替換字符。可以配置多個 Character Filters。會影響 Tokenizer 的 position 和 offset 信息
一些自帶的 Character Filters:

  • HTML strip - 去除 html 標籤
  • Mapping - 字符串替換
  • Pattern replace - 正則匹配替換

Tokenizer

  • 將原始的文本按照一定的規則,切分爲詞(term or token)
  • Elasticsearch 內置的 Tokenizers:whitespace | standard | uax_url_email | pattern | keyword | path hierarchy
  • 可以用 JAVA 開發插件,實現自己的 Tokenizer

Token Filters

  • 將 Tokenizer 輸出的單詞,進行增加、修改、刪除
  • 自帶的 Token Filters:Lowercase |stop| synonym(添加近義詞)