18 - Elasticsearch 多字段特性及自定義Analyzer

多字段類型

  • 多字段特性
  • 廠商名字實(shí)現(xiàn)精確匹配
    • 增加一個keyword字段
  • 使用不同的analyzer
    • 不同語言
    • pinyin字段的搜索
    • 還支持為搜索和索引指定不同的analyzer
多字段特性模板

Exact Values VS Full Text

  • Exact vaues v.s Full text
    • Exact value:包括數(shù)字 / 日期 / 具體一個字符串(例如:"Apple Store")
      • Elasticsearch 中的keyword
    • 全文本,非結(jié)構(gòu)化的文本數(shù)據(jù)
      • Elasticsearch中的text

Exact Values不需要被分詞

  • Elasticsearch為每一個字段創(chuàng)建一個倒排索引
    • Exact Value在索引時(shí),不需要做特殊的分詞處理
PUT logs/_doc/1
{
  "level": "DEBUG"
}
PUT logs/_doc/2
{
  "level": "INFO"
}
PUT logs/_doc/3
{
  "level": "INFO"
}
PUT logs/_doc/4
{
  "level": "ERROR"
}

Level倒排表

倒排表
DEBUG 1
INFO 2,3
ERROR 4

自定義分詞

  • 當(dāng)Elasticsearch自帶的分詞器無法滿足時(shí),可以自定義分詞器,通過資組合不同組件實(shí)現(xiàn)
    • Character Filter
    • Tokenizer
    • Token Filter

Character Filters

  • 在Tokenizer之前對文本進(jìn)行處理,例如增加刪除及替換字符。可以配置多個Character Filters.會影響Tokenizer的position和offset信息
  • 一些自帶的Character Filters
    • HTML strip:去除html標(biāo)簽
    • Mapping:字符串替換
    • Pattern replace:正則匹配替換

Tokenizer

  • 將原始的文本按照一定的規(guī)則,切分為詞(term or token)
  • Elasticsearch內(nèi)置的Tokenizers
    • whitespace / standard / uax_url_emall / pattern / keyword / path hierarchy
  • 可以用java開發(fā)插件,實(shí)現(xiàn)自己的Tokenizer

Token Filter

  • 將Tokenizer輸出的單詞(term),進(jìn)行增加,修改,刪除
  • 自帶的Token Filters
    • Lowercase / stop / synonym(添加近義詞)

設(shè)置一個Custom Analyzer

設(shè)置一個analyzer
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容