elasticsearch文本分析

  • 分析器
    • 字符过滤器
    • 分词器
      • 分词器的作用
      • 词干
        • 词干过滤器
    • 令牌过滤器
  • 测试分词
    • analyze API
      • 分析分词
      • 分析分词令牌过滤器
      • 创建索引添加文本分析
  • 分词器
    • 默认分词器
    • 自定义分词器
    • 指定分词器
      • 内置分词器
        • html_strip
        • my_mappings_char_filter
      • pattern_replace character filter

分析器

无论是内置的还是自定义的——只是一个包含三个较低级构建块的包:字符过滤器、标记器和标记过滤器。

字符过滤器

字符过滤器以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换字符流。 例如,可以使用字符过滤器将印度-阿拉伯数字(٠‎١٢٣٤٥٦٧٨‎٩‎)转换为阿拉伯-拉丁数字(0123456789),或者从流中剥离像这样的HTML元素。

一个分析器可以有零个或多个字符过滤器,它们是按顺序应用的。

分词器

在创建索引的时候需要用到分词器,在使用字符串搜索的时候也会用到分词器,并且这两个地方要使用同一个分词器,否则可能会搜索不出来结果。

分词器的作用

  • 分词器(Analyzer)的作用是把一段文本中的词按规则取出所包含的所有词,对应的是Analyzer类,这是一个抽象类(public abstract class org.apache.lucene.analysis.Analyzer),切分词的具体规则是由子类实现的,所以对于不同的语言规则,要有不同的分词器。

词干

词干提取是将单词简化为词根形式的过程

词干过滤器

  • 算法词干分析器
    它们需要很少的设置,并且通常开箱即用。
    他们使用很少的内存。
    它们通常比字典词干分析器更快。
  • 字典词干分析器
    字典词干分析器在提供的字典中查找单词,用字典中的词干词替换未词干的词变体。
    缺点:

    • 词典质量
      词典词干分析器的好坏取决于它的词典。为了正常工作,这些词典必须包含大量单词,定期更新,并随着语言趋势而变化。通常,当字典可用时,它是不完整的,并且其中的一些条目已经过时了。
    • 大小和性能
      词典词干分析器必须将其词典中的所有单词、前缀和后缀加载到内存中。这可能会使用大量 RAM。低质量的字典在去除前缀和后缀时可能效率较低,这会显着减慢词干提取过程。

令牌过滤器

令牌过滤器接收令牌流,并可以添加、删除或更改令牌。 例如,小写令牌过滤器将所有令牌转换为小写令牌,停止令牌过滤器从令牌流中删除常见单词(停止单词),同义词令牌过滤器将同义词引入令牌流。

令牌过滤器不允许更改每个令牌的位置或字符偏移量。

Analyzer可以有零个或多个令牌过滤器,它们是按顺序应用的。

测试分词

analyze API

分析分词

POST _analyze
{"analyzer": "whitespace","text":     "The quick brown fox."
}

分析分词令牌过滤器

POST _analyze
{"tokenizer": "standard","filter":  [ "lowercase", "asciifolding" ],"text":      "Is this déja vu?"
}

创建索引添加文本分析

PUT my-index-000001
{"settings": {"analysis": {"analyzer": {"std_folded": { "type": "custom","tokenizer": "standard","filter": ["lowercase","asciifolding"]}}}},"mappings": {"properties": {"my_text": {"type": "text","analyzer": "std_folded" }}}
}

分词器

默认分词器

自定义分词器

配置

type Analyzer 类型,接受内置Analyzer类型。对于自定义分析器,使用custom或省略此参数
tokenizer 内置或定制的分词器。(必需的)
char_filter 可选的内置或自定义字符过滤器数组 。
filter 可选的内置或自定义令牌过滤器数组 。
position_increment_gap 当索引一个文本值数组时,Elasticsearch 在一个值的最后一个词和下一个值的第一个词之间插入一个假的“间隙”,以确保一个短语查询不匹配来自不同数组元素的两个词。
PUT my-index-000001
{"settings": {"analysis": {"analyzer": {"my_custom_analyzer": { `1`"char_filter": ["emoticons"],"tokenizer": "punctuation","filter": ["lowercase","english_stop"]}},"tokenizer": {"punctuation": { `2`"type": "pattern","pattern": "[ .,!?]"}},"char_filter": {"emoticons": { `3`"type": "mapping","mappings": [":) => _happy_",":( => _sad_"]}},"filter": {"english_stop": { `4`"type": "stop","stopwords": "_english_"}}}}
}POST my-index-000001/_analyze
{"analyzer": "my_custom_analyzer","text": "I'm a :) person, and you?"
}
response:{[我,_happy_,人,你]}

1,为索引分配一个默认的自定义Analyzer,my_custom_analyzer. 此Analyzer使用稍后在请求中定义的自定义标记器、字符过滤器和标记过滤器。该Analyzer也省略了type参数。
2,定义自定义punctuation标记器。
3,定义自定义emoticons字符过滤器。
4,定义自定义english_stop令牌过滤器。

指定分词器

  • 字段
PUT my-index-000001
{"mappings": {"properties": {"title": {"type": "text","analyzer": "whitespace"}}}
}
  • 索引
PUT my-index-000001
{"settings": {"analysis": {"analyzer": {"default": {"type": "simple"}}}}
}

内置分词器

  • Standard Analyzer
    所述standardAnalyzer将文本分为在字边界条件,如通过Unicode文本分割算法定义。它删除了大多数标点符号、小写术语,并支持删除停用词。
  • Simple Analyzer
    讲除了字母以外的符号全部去除,并且讲所有字符变为小写,需要注意的是这个分词器同样把数据也去除了,同样不支持中文。
  • Whitespace Analyzer
    仅仅是去掉了空格,没有其他任何操作,不支持中文。
  • Stop Analyzer
    这个和SimpleAnalyzer类似,不过比他增加了一个的是,在其基础上还去除了所谓的stop words,比如the, a, this这些。这个也是不支持中文的
  • StandardAnalyzer
    英文方面的处理和StopAnalyzer一样的,对中文支持,使用的是单字切割。
  • Keyword Analyzer
    所述keywordAnalyzer是一个“空操作”Analyzer接受任何文本它被赋予并输出完全相同的文本作为一个单一的术语。
  • Pattern Analyzer
    所述patternAnalyzer使用一个正则表达式的文本分成条款。它支持小写和停用词。
  • Language Analyzers
    Elasticsearch 提供了许多特定于语言的Analyzer,例如english或 french。
  • Fingerprint Analyzer
    所述fingerprintAnalyzer是一个专业Analyzer,它产生可用于重复检测指纹。
POST _analyze
{"analyzer": "fingerprint",
"text": "Yes yes, Gödel said this sentence is consistent and."
}
[ and consistent godel is said sentence this yes ]

html_strip

GET /_analyze
{"tokenizer": "keyword",
"char_filter": ["html_strip"
],
"text": "<p>I&apos;m so <b>happy</b>!</p>"
}
[ \nI'm so happy!\n ]
  • 使用
PUT /my-index-000001
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "keyword","char_filter": ["html_strip"]}}}
}
}

my_mappings_char_filter

PUT /my-index-000001
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "standard","char_filter": ["my_mappings_char_filter"]}},"char_filter": {"my_mappings_char_filter": {"type": "mapping","mappings": [":) => _happy_",":( => _sad_"]}}}
}
}
GET /my-index-000001/_analyze
{"tokenizer": "keyword",
"char_filter": [ "my_mappings_char_filter" ],
"text": "I'm delighted about it :("
}
[ I'm delighted about it _sad_ ]

pattern_replace character filter

PUT my-index-000001
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "standard","char_filter": ["my_char_filter"]}},"char_filter": {"my_char_filter": {"type": "pattern_replace","pattern": "(\\d+)-(?=\\d)","replacement": "$1_"}}}
}
}POST my-index-000001/_analyze
{"analyzer": "my_analyzer",
"text": "My credit card is 123-456-789"
}
[ My, credit, card, is, 123_456_789 ]

elasticsearch Analyzer相关推荐

  1. 【Elasticsearch】Elasticsearch analyzer 中文 分词器

    1.概述 转载: https://blog.csdn.net/tzs_1041218129/article/details/77887767 分词器首先看文章:[Elasticsearch]Elast ...

  2. Elasticsearch Analyzer 内置分词器

    Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 前置知识 es 提供 ...

  3. Elasticsearch: analyzer

    如果大家之前看过我写的文章 "开始使用Elasticsearch (3)",在文章的最后部分写了有关于 analyzer 的有关介绍.在这里,我必须指出的是,analyzer 只作 ...

  4. elasticsearch Analyzer 进行分词详解

    文章目录 1. Anaiysis 与 Analyzer 2. Analyzer 的组成 3. Elastocsearch 的内置分词器 3.1 使用 _analyzer Api 3.1.1 直接指定 ...

  5. Elasticsearch Analyzer 的内部机制

    转自:https://www.aliyun.com/jiaocheng/785749.html 摘要:1本文将介绍各种Analyzer,以及他们各种的应用场景.涉及到的概念Characterfilte ...

  6. 【Elasticsearch】Elasticsearch analyzer 分词器

    文章目录 1.概述 1.1 什么是analysis? 2.发生时期 3.开箱即用analyzer 3.1 默认的分词器 3.Analyze API 4.分词器介绍 4.1.标准分词器 Standard ...

  7. Spring Data ElasticSearch analyzer 定义 @Filed失效 @Mapping失效 创建索引 无效 解决办法 ElasticsearchRestTemplate

    ES版本 7.x 首先上失效原因 SpringDataElasticsearch版本变动频繁,很多网上的代码失效,有很多方法标记为过时 ElasticsearchRestTemplate不读@File ...

  8. Elasticsearch:Standard Text Analyzer - 标准文本分析器

    Elasticsearch 提供了超过很多开箱即用的分析器,我们可以在文本分析阶段使用它们. 这些分析器很可能足以满足基本情况,但如果需要创建自定义分析器,可以通过使用构成该模块的所需组件实例化一个新 ...

  9. Elasticsearch Top 51 重中之重面试题及答案

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 铭毅天下 来源 | https://mp.we ...

最新文章

  1. Outlook addon CommandBarButton picture 的不透明效果解决方案
  2. python中新式类和经典类
  3. centos7 git安装
  4. Elasticsearch7.15.2 mysql8.0.26 logstash-input-jdbc 数据增量索引构建
  5. Boost笔记--Thread--Ubuntu上初次使用时遇到的问题
  6. 前苹果M1芯片设计总监跳槽英特尔 或将负责所有SoC架构设计
  7. python参数检查类型_Python类型检查
  8. java redis pubsub_如何从Java中的生菜RedisPubSubListener获取消息?
  9. 应用机器学习(七):随机森林
  10. 9本R语言书,从入门到进阶都在这了
  11. Qt浅谈之七:抽奖软件(可显示图片和姓名)
  12. 推荐一款好用的Web端JSON在线编辑器svelte-jsoneditor
  13. Python计算斗牛游戏的概率
  14. 文件共享服务器(CIFS协议)
  15. 【问题解决】java.sql.SQLException: null, message from server: “Host ‘xxx.xx.xx.xxx‘ is blocked because of
  16. 十、软考·系统架构师——软件测试及维护
  17. JSD-2204-SpringBoot+MyBatis-Day12
  18. python进阶day4
  19. 【系统分析师之路】项目管理类论文写法心得
  20. HTAP应该是一种需求 而不是一种产品

热门文章

  1. 传统 Web 框架部署与迁移
  2. 关于餐饮软件开源相关(2)
  3. Pytorch详细教程——5.Tensors Explained
  4. ASP.NET教育OA系统源码 教育行业OA系统源码带文档
  5. 计算机组成运算器原理实验报告,计算机组成原理运算器实验报告
  6. ISO8601时间格式的转换
  7. HIS与护理系统集成经验之我谈
  8. 光伏并网逆变器,F28335光伏并网逆变器
  9. C++:实现DNS劫持(附完整源码)
  10. C/C++校园导航图的实现