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

多字段类型

  • 多字段特性
  • 厂商名字实现精确匹配
    • 增加一个keyword字段
  • 使用不同的analyzer
    • 不同语言
    • pinyin字段的搜索
    • 还支持为搜索和索引指定不同的analyzer
多字段特性模板

Exact Values VS Full Text

  • Exact vaues v.s Full text
    • Exact value:包括数字 / 日期 / 具体一个字符串(例如:"Apple Store")
      • Elasticsearch 中的keyword
    • 全文本,非结构化的文本数据
      • Elasticsearch中的text

Exact Values不需要被分词

  • Elasticsearch为每一个字段创建一个倒排索引
    • Exact Value在索引时,不需要做特殊的分词处理
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

自定义分词

  • 当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_emall / pattern / keyword / path hierarchy
  • 可以用java开发插件,实现自己的Tokenizer

Token Filter

  • 将Tokenizer输出的单词(term),进行增加,修改,删除
  • 自带的Token Filters
    • Lowercase / stop / synonym(添加近义词)

设置一个Custom Analyzer

设置一个analyzer
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容