Elasticsearch之分词

本文对Elasticsearch的分词相关进行一个简单的介绍

  • 分词

分词是指将文本转换成一系列的单词(term or token)的过程,也可以叫做文本分析,在ES里面成为Analysis,如下图所示:


分词
  • 分词器

分词器是ES中专门处理分词的组件,英文为Analyzer,它的组成如下:
- Character Filter:针对原始文本进行处理,比如去除html特殊标记符
- Tokenizer:将原始文本按照一定规则切分为单词
- Token Filter:针对Tokenizer处理的单词进行在加工,比如转小写、删除或新增等处理
执行顺序由上到下

  • Analyze API

ES提供了以个测试分词的api接口,方便验证分词效果,endpoint是_analyze
  - 可以直接指定analyzer(分词器)进行测试
  - 可以直接指定索引中字段进行测试
  - 可以自定义分词器进行测试
直接指定analyzer进行测试,接口如下:

指定分词器
直接指定索引中的字段进行测试,接口如下:
指定索引
当我们已经创建好索引,对索引的一个字段做查询时它的输出跟我们的预期不一样,这时我们就可以利用此接口针对这个字段进行测试
自定义分词器进行测试,接口如下:
自定义分析器

  • ES预定义分词器

Standard、Simple、Whitespace、Stop、Keyword、Pattern、Language
Standard Analyzer

Standard Analyzer
Simple Analyzer
Simple Analyzer
Whitespace Analyzer
Whitespace Analyzer
Stop Analyzer
Stop Analyzer
Keyword Analyzer
Keyword Analyzer
Pattern Analyzer
Pattern Analyzer
Language Analyzer
Language Analyzer

  • 中文分词
    中文分词

常用的中文分词系统

常用中文分词器

基于自然语言处理的分词系统
基于自然语言处理的分词系统

  • 自定义分词

当自带的分词无法满足需求时,可以自定义分词,通过自定义Character Filter、Tokenizer 和 Token Filter实现。

自定义分词之Character Filter

Character Filter

Character Filter测试时可以采用如下api:
Character Filter测试api

自定义分词之Tokenizer
Tokenizer

Tokenizer测试时可以采用如下api:
Tokenizer测试api

自定义分词之Token Filters
Token Filters

Filter测试时可以采用如下api:
Filter测试api

自定义分词的api
自定义分词需要在索引的配置中设定,如下图所示:
自定义分词
示例
验证

  • 分词使用说明

分词会在如下两个时机使用:
 - 创建或更新文档时(Index Time),会对相应的文档进行分词处理。
 -查询时(Search Time),会对查询语句进行分词。

  • 索引时分词

    索引时分词是通过配置Index Mapping中每个字段的analyzer属性实现的,不指定分词时,默认使用standard
    索引时分词
  • 查询时分词
     - 查询的时候通过analyzer指定分词器

     - index mapping 设置search_analyzer 实现
    查询时分词
    一般不需要特别指定查询时分词器,直接使用索引时分词器即可,否则会出现无法匹配的情况。
  • 分词的使用建议

  • 明确字段是否需要分词,不需要分词的字段就将type设置为keyword,可以节省空间和提高写的性能。
  • 善用 _analyze API,查看文档的具体分词结果。
  • 动手测试。

你可能感兴趣的:(Elasticsearch之分词)