ElasticSearch六--ES--Analyzer分词

2024-03-28 23:32

本文主要是介绍ElasticSearch六--ES--Analyzer分词,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Analyzer分词

Analysis 和 Analyzer

Analysis - 文本分析是把全文本转换成一系列单词(term/token)的过程,也叫分词

Analysis 是通过 Analyzer 来实现的

  • 可使用 Elasticsearch 内置的分析器,或者按需制定分析器

除了在数据写入时转换词条,匹配 Query 语句时候也需要用相同的分析器对查询语句进行分析

Analyzer 的组成

分词器是专门处理分词的组件,由三部分组成

  • Character Filters (针对原始文本处理,例如去除html)
  • Tokenizer (按照规则切分为单词)
  • Token Filter(将切分的单词进行加工,小写,删除 stopwords,增加同义词)

例子:

Mastering Elasticsearch & Elasticsearch in Action 经过上面的步骤就会产生

  • master
  • elasticsearch
  • action

ES的内置分词器

  • Standard Analyzer - 默认分词器,按词切分,小写处理
  • Simple Analyzer - 按照非字母切分(符号被过滤),小写处理
  • Stop Analyzer - 小写处理,停用词过滤(the a is)
  • WhiteSpace Analyzer - 按照空格切分,不转小写
  • Keyword Analyzer - 不分词,直接将输入当做输出
  • Patter Analyzer - 正则表达式,默认\W+(非字符分隔)
  • Language - 提供了30多种常见语言的分词器
  • Customer Analyzer 自定义分词器

使用 _analyzer API

直接指定 Analyzer 进行测试

指令

GET /_analyze
{"analyzer":"standard","text":"Mastering Elasticsearch & Elasticsearch in Action"
}

结果

{"tokens" : [{"token" : "mastering","start_offset" : 0,"end_offset" : 9,"type" : "<ALPHANUM>","position" : 0},{"token" : "elasticsearch","start_offset" : 10,"end_offset" : 23,"type" : "<ALPHANUM>","position" : 1},{"token" : "elasticsearch","start_offset" : 25,"end_offset" : 38,"type" : "<ALPHANUM>","position" : 2},{"token" : "in","start_offset" : 39,"end_offset" : 41,"type" : "<ALPHANUM>","position" : 3},{"token" : "action","start_offset" : 42,"end_offset" : 48,"type" : "<ALPHANUM>","position" : 4}]
}

指定索引的字段进行测试

指令

POST test_home/_analyze
{"field": "job_name","text":"Mastering Elasticsearch, Elasticsearch in Action"
}

结果

{"tokens" : [{"token" : "mastering","start_offset" : 0,"end_offset" : 9,"type" : "<ALPHANUM>","position" : 0},{"token" : "elasticsearch","start_offset" : 10,"end_offset" : 23,"type" : "<ALPHANUM>","position" : 1},{"token" : "elasticsearch","start_offset" : 25,"end_offset" : 38,"type" : "<ALPHANUM>","position" : 2},{"token" : "in","start_offset" : 39,"end_offset" : 41,"type" : "<ALPHANUM>","position" : 3},{"token" : "action","start_offset" : 42,"end_offset" : 48,"type" : "<ALPHANUM>","position" : 4}]
}

自定义分词进行测试

指令

POST _analyze
{"tokenizer": "standard","filter": ["lowercase"],"text":"Mastering Elasticsearch, Elasticsearch in Action"
}

结果

{"tokens" : [{"token" : "mastering","start_offset" : 0,"end_offset" : 9,"type" : "<ALPHANUM>","position" : 0},{"token" : "elasticsearch","start_offset" : 10,"end_offset" : 23,"type" : "<ALPHANUM>","position" : 1},{"token" : "elasticsearch","start_offset" : 25,"end_offset" : 38,"type" : "<ALPHANUM>","position" : 2},{"token" : "in","start_offset" : 39,"end_offset" : 41,"type" : "<ALPHANUM>","position" : 3},{"token" : "action","start_offset" : 42,"end_offset" : 48,"type" : "<ALPHANUM>","position" : 4}]
}

中文分词的难点

中文句子,切分成一个个词(不是一个个字)

英文字,单词有自然地空格进行切分

一句中文,在不同的上下文,有不同的理解

推荐的一些中文分词器:

  • icu
  • ik : https://github.com/medcl/elasticsearch-analysis-ik
  • thulac : https://github.com/microbun/elasticsearch-thulac-plugin

极客时间 ES 学习笔记

这篇关于ElasticSearch六--ES--Analyzer分词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856991

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

【docker】基于docker-compose 安装elasticsearch + kibana + ik分词器(8.10.4版本)

记录下,使用 docker-compose 安装 Elasticsearch 和 Kibana,并配置 IK 分词器,你可以按照以下步骤进行。此过程适用于 Elasticsearch 和 Kibana 8.10.4 版本。 安装 首先,在你的工作目录下创建一个 docker-compose.yml 文件,用于配置 Elasticsearch 和 Kibana 的服务。 version:

ElasticSearch底层原理简析

1.ElasticSearch简述 ElastiaSearch(以下简称ES)是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,支持RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。ES设计用于云计算中,能够进行实时搜索,支持PB级搜索,具有稳定,可靠,快速,安装使用方便等

Java实现Smartcn中文分词

新建一个Maven项目,修改pom.xml文件内容:注意版本的不同; <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-analyzers-smartcn --><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-analyzers

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":