ElasticSearch系列05:倒排序索引与分词Analysis

引言:上一节我们学习ES索引和文档的CURD,本来计划这节就开始介绍ES的Query DSL,但考虑再三,还是应该先学习了解“倒排序索引”和“Analysis”,这样,对于检索才会有一个更好的理解,才能更好的应用。【关注公众号:ZeroTeHero,系统学习ES】

一、 倒排索引是什么?

倒排索引是 Elasticsearch 中非常重要的索引结构,是从文档单词到文档 ID 的映射过程

1.1 通过示例,简单理解下

 就拿专栏文章来说,我们平时在各大平台根据关键词检索时,使用到的技术就有“倒排序索引”。

数据结构

假设我们的文章的储存结果如上,对于关系型数据库mysql来说,普通的索引结构就是“id->题目->内容”,在我们搜索的时候,如果我们知道id或者题目,那么检索效率是很高效的,因为“id”、“题目”是很方便创建索引的。

正向索引

但是当我们只有一个检索关键词,比如需求是搜索到与“倒排序索引”相关的文章时,在索引结构是“id->题目->内容”时,就只能对“题目”和“内容”进行全文扫描了,当数量级上去后,效率是没办法接受的!对于这类的搜索,关系型数据库的索引就很难应付了,适合使用全文搜索的倒排索引。

那么倒排序索引的结构是怎样的呢?简单来讲就是“以内容的关键词”建立索引,映射关系为“内容的关键词->ID”。这样的话,我们只需要在“关键词”中进行检索,效率肯定更快。

倒排序索引

1.2 核心组成

  • 倒排序索引包含两个部分:

  • 》单词词典:记录所有文档单词,记录单词到倒排列表的关联关系

  • 》倒排列表:记录单词与对应文档结合,由倒排索引项组成

  • 倒排索引项:

  • 》文档

  • 》词频 TF - 单词在文档中出现的次数,用于相关性评分

  • 》位置(Position)- 单词在文档中分词的位置,用于phrase query

  • 》偏移(Offset)- 记录单词开始结束的位置,实现高亮显示

  • 》偏移(Offset)- 记录单词开始结束的位置,实现高亮显示

举个简单例子,理解下“倒排索引项”:以 Token“学习”为例:

倒排序索引项List

二、倒排索引是怎么工作的?

主要包括2个过程:1、创建倒排索引;2、倒排索引搜索

2.1 创建倒排索引

还是使用上面的例子。先对文档的内容进行分词,形成一个个的 token,也就是 单词,然后保存这些 token 与文档的对应关系。结果如下:

2.2 倒排索引搜索

搜索示例1:“学习索引”

  • 先分词,得到两个Token:“学习”、“索引”

  • 然后去倒排索引中进行匹配

这2个Token在2个文档中都匹配,所以2个文档都会返回,而且分数相同。

搜索示例2:“学习es”

同样,2个文档都匹配,都会返回。但是文档1的相关性评分会高于文档2,因为文档1匹配了两个Token,而文档2只匹配了一个Token【学习】。

通过上面的讲解,我们学习了解了:倒排序索引是什么及其工作流程。其中有一个非常重要的环节——对文档进行分词,得到Token。那么这个分词过程,是怎样进行的呢?

三、Analysis 进行分词

Analysis:即文本分析,是把全文本转化为一系列单词(term/token)的过程,也叫分词;在Elasticsearch 中可通过内置分词器实现分词,也可以按需定制分词器。

3.1 Analyzer 由三部分组成

• Character Filters:原始文本处理,如去除 html • Tokenizer:按照规则切分为单词 • Token Filters:对切分单词加工、小写、删除 stopwords,增加同义词

3.2 Analyzer 分词过程简介

  • 1)字符过滤器  character filter

首先,字符串按顺序通过每个字符过滤器 。他们的任务是在分词前整理字符串。一个字符过滤器可以用来去掉HTML,或者将 & 转化成 and。

  • 2)分词器 tokenizer

其次,字符串被 分词器 分为单个的词条。一个 whitespace的分词器遇到空格和标点的时候,可能会将文本拆分成词条。

ES分词器汇总

  • 3)令牌过滤器token filter

最后,词条按顺序通过每个 token 过滤器 。这个过程可能会改变词条,例如,lowercase token filter  小写化(将ES转为es)、stop token filter 删除词条(例如, 像 a, and, the 等无用词),或者synonym token filter 增加词条(例如,像 jump 和 leap 这种同义词)。

3.3 自定义分析器

#1、定义名为“custom_analyzer”的自定义分析器:大写转为小写
PUT tehero_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
# 2、该字段my_text使用custom_analyzer分析器
  "mappings": {
    "_doc": {
      "properties": {
        "my_text": {
          "type": "text",
          "analyzer": "custom_analyzer"
        }
      }
    }
  }
}

3.4 测试分词

# 要引用此分析器,analyzeAPI必须指定索引名称。
# 直接使用分析器
GET tehero_index/_analyze 
{
  "analyzer": "custom_analyzer",
  "text":"关注TeHero,系统学习ES"
}
# 通过字段使用
GET tehero_index/_analyze
{
  "field": "my_text",
  "text": "关注TeHero,系统学习ES"
}

效果:

{
  "tokens": [
    {
      "token": "关",
      "start_offset": 0,
      "end_offset": 1,
      "type": "<IDEOGRAPHIC>",
      "position": 0
    },
    {
      "token": "注",
      "start_offset": 1,
      "end_offset": 2,
      "type": "<IDEOGRAPHIC>",
      "position": 1
    },
    {
      "token": "tehero",
      "start_offset": 2,
      "end_offset": 8,
      "type": "<ALPHANUM>",
      "position": 2
    }
…………
]

也可以直接使用analyzer

POST _analyze
{
  "analyzer": "whitespace",
  "text":"关注TeHero 系统学习ES"
}
# 也可直接设置tokenizer和filter
POST _analyze
{
  "tokenizer": "standard",
  "filter":  [ "lowercase" ],
  "text":"关注TeHero 系统学习ES"
}

效果:

{
  "tokens": [
    {
      "token": "关注TeHero",
      "start_offset": 0,
      "end_offset": 8,
      "type": "word",
      "position": 0
    },
    {
      "token": "系统学习ES",
      "start_offset": 9,
      "end_offset": 15,
      "type": "word",
      "position": 1
    }
  ]
}

从analyzeAPI 的输出可以看出,分析器不仅将搜索词转换为Token,而且还记录 每个Token的顺序或相对位置(用于短语查询或单词接近性查询),以及每个Token的开始和结束字符偏移量原始文字中的字词(用于突出显示搜索摘要)。

下期预告:ES的Query DSL 【关注公众号:ZeroTeHero,系统学习ES】

待续


       

ElasticSearch系列01:如何系统学习ES

● ElasticSearch系列02:ES基础概念详解

● ElasticSearch系列03:ES的数据类型

● ElasticSearch系列04:索引和文档的CURD

方才兄
关注 关注
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
探究 | ES索引分词
devilzcl的博客
07-04 856
兄弟萌,相信大家在学习 Elasticsearch 都听说过索引吧,下面我们尝试用最简单易懂的方式来讲讲 ES 中的索引分词索引建立的是单词和文档 id 的关联关系,建立索引时,首从文档中拆分出词条,这个过程就是 “分词”。 1.索引 1.1 什么是索引? 我们要搞懂索引,首来看看什么是正排(正向)索引? 我们知道通过文章 id 可以快速查找到文章内容,之所以检索比较快是因为文章 id 设置为主键,同时生成了主键索引,然后通过主键索引快速关联到存储信息,这种索引
索引擎-索引基础知识
云计算?
09-11 740
索引擎的索引 1.单词——文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。 图3-1 单词-文档矩阵 从纵向即文档这个维度来看,每列代表文档包含了哪些单词,比如文档1包含了词汇1和词汇4,而不包含其它单词。从横...
一文读懂排序索引涉及的核心概念
liwenxiang629的博客
03-08 966
相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下排序索引,这个概念搞明白之后,然后学习Elasticsearch就会清晰很多了。
索引计划——排序索引
CSU174712009的博客
08-29 371
表操作语句: 创建表 create table student ( id int, name varchar(30), birthday date, score numeric(5,2) ); 修改表名: alter table student rename to student1; 删除表: drop table student1; drop table if exists student1; --------------------------------------
Elasticsearch——Analysis概述
qq_37107851的博客
06-23 368
目录 Text analysis 什么时候配置 text analysis? 文本分析概述 Tokenization Normalization 自定义文本分析(Customize text analysis) 分析器结构 字符过滤器 分词器 Token筛选器 索引和搜索分析 索引和搜索分析器如何协同工作 何时使用其他搜索分析器 索引分析模块充当分析器的可配置注册表,可用于将字符串字段转换为单个术语,这些术语包括: 添加到索引以使文档可搜索 由高级查询(如匹配查询)用
ES 拼音分词器 https://github.com/medcl/elasticsearch-analysis-pinyin
最新发布
06-08
ES中的拼音分词器: 拼音分词器是一种在中文文本中将汉字转换为对应拼音的工具。它可以将中文文本分解为拼音首字母或完整拼音,并将其作为词汇进行索引和搜索。 拼音分词器的主要作用是为了支持拼音检索或拼音搜索...
elasticsearch-analysis-hanlp:用于Elasticsearch的HanLP分析器
05-23
elasticsearch-analysis-hanlpHanLP Analyzer for ElasticSearch分词器基于,提供了HanLP中大部分的分词方式。今年一年都在忙其他事,所以插件更新基本一年没有更新,年底更新一波。今年学习了一下ES向量插件...
elasticsearch-analysis-ik-7.6.2-main.zip ;IK分词
04-10
IK分词器是ES的一个插件,主要用于把一段中文或者英文的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成...
elasticsearch-analysis-pinyin-5.4.0
06-14
elasticsearch-analysis-pinyin是ElasticSearch的一个分词插件,能够实现拼音分词索引 ,官网下载 https://github.com/medcl/elasticsearch-analysis-pinyin ,此文件已经覆盖了官网的文件和编译好的文件,大家无需...
elasticsearch-analysis-ik-5.2.2.zip
05-22
IK分词器,多少人用过,中国人开发的包,用在ElasticSearch 分词搜索上,ElasticSearch利用其 优秀的 索引方式,能成功在千万级数据中找到 相关信息,但仅仅可以用在英文单词搜索上,对于中文,老外也设置了,...
ElasticSearch多值字段排序和带分词字符排序
勇心在馨
06-23 2475
多值字段比如数组, 假设索引test里有如下文档结构 { "dates":["2020-06-01","2020-05-02","2019-05-02"] } 如果要对test里的dates排序该如何? { “query”:{ }, "sort": { "dates": { "order": "asc", "mode": "min" } } } 对于数字或日期,你可以将多值字段减为单值,这可以通过使用min、max、avg或是sum排序模式...
Elasticsearch学习笔记-基础篇2】Elasticsearch索引、分析及打分
weixin_43742184的博客
12-16 508
在之前的一篇文章中,简单介绍了 es 的设计和相关概念,这一篇来介绍一下 es 中实操方面相关概念的引申——在索引和搜索文档的时候,es 是怎么做的。
Elasticsearch——查询结果排序
qq_37107851的博客
10-11 2847
允许我们在特定字段上添加一个或多个排序。每种分类也可以颠排序是在每个字段级别定义的,具有特殊的字段名,用于_score按分数排序,以及_doc按索引顺序排序。 假设以下索引映射: PUT /my-index-000001 { "mappings": { "properties": { "post_date": { "type": "date" }, "user": { "type": "keyword" }, "name"
索引分词
三思的博客
08-09 672
文章目录一、索引1、什么是索引二、分词器1、analyzsis 与 analyzer2、常见的内置分词器3、中文分词器4、_analyze API 一、索引 1、什么是索引 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g7SO2mhV-1596981293103)(http://note.youdao.com/yws/res/60510/2AE09DC7D9A24970A52A45FE10EB8BDF)] 主要包含两部分: 1、单词词典(Term Dicti
elasticsearch篇之正/索引分词
lyzkks的博客
05-11 3986
索引分词 类似于书的目录,目录能够方便的定位哪一章节或哪一小节的页码,但是无法定位某一关键字的位置。有一些书的最后有索引页,它的功能就是帮助定位某些关键字出现的位置。 目录页对应正排索引 索引页对应索引 正排索引索引 对于搜索引擎来讲: 正排索引是文档 Id 到文档内容、单词的关联关系。也就是说可以通过 Id获取到文档的内容。 索引是单词到文档 Id ...
ElasticSearch(7)-排序
weixin_34367845的博客
12-08 619
引用自ElaticSearch权威指南 一、排序 相关性排序 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前。 这一章我们会讲述相关性是什么以及它是如何计算的。 在此之前,我们看一下sort参数的使用方法。 排序方式 为了使结果可以按照相关性进行排序,我们需要一个相关性的值。在ElasticSearch的查询结果中, 相关性分值会用_score字段来给出一个浮点型...
elasticsearch系列排序
热门推荐
喝醉的清茶
09-19 3万+
ElasticSearch想关性排序在默认的情况下,结果集会按照相关性进行排序,也就是相关性越高,排名越靠前。本次我们说到的是字段值排序一级排序在常见的例子当中,我们会按照时间进行排序,从而将最新的文档排列靠前。
SpringBoot整合ElasticSearch实现电商高性能搜索引
03-20
Elasticsearch 简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。elasticSearch 的使用场景 1、在海量数据前提下,对数据进行检索。比如:京东,淘宝等电商项目课程目标: 1. 了解企业级搜索引擎2. 安装elasticsearch 课程目录: 01 课程介绍02 elasticsearch 简介03 elasticsearch 使用场景04 安装elasticsearch 之前安装jdk05 安装elasticsearch06 测试elasticsearch是否安装成功 07 安装kibana08 elasticsearch 基本认识 以及添加索引和删除索引09 elasticsearch 添加查询数据10 elasticsearch 修改删除数据11 elasticsearch 有条件的查询12 分词子属性fuzzy查询13 elasticsearch 过滤使用14 elasticsearch 排序与分页15 elasticsearch 如何查询指定的字段16 elasticsearch 高亮显示17 elasticsearch 聚合18 elasticsearch mapping 概念19 elasticsearch 的中文词库20 elasticsearch 中文词库安装测试21 elasticsearch 中文词库的使用案例22 elasticsearch 自定义词库配置23 安装nginx 配置中文词库24 测试elasticsearch 自定义中文词库25 搭建项目父工程26 搭建项目bean-interface-common27 搭建search 的service web 项目28 测试项目是否能与elasticsearch联通29 创建数据库并搭建首页30 数据上传功能的实现类完成31 数据上传控制器完成32 dubbo 介绍以及安装zookeeper33 将数据从mysql 上传到elasticsearch 中34 elasticsearch查询功能分析35 编写业务需求的dsl 语句36 编写输入参数返回结果集的实体类37 实现类编写38 编写实现类中dsl 语句39 返回集结果转换40 结果测试41 测试通过输入查询条件并将数据显示到页面
Elasticsearch mapping与analysis
Kuzury
02-28 2561
映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型(string, number, booleans, date等)。分析(analysis)机制用于进行全文文本(Full Text)的分词,以建立供搜索用的反向索引。 数据类型的差异当在索引中处理数据时,我们注意到一些奇怪的事。有些东西似乎被破坏了:在索引中有12个tweets,只有一个包含日期2014-09-15,
es创建索引时如何指定默认分词
03-31
Elasticsearch中创建索引时,可以通过以下方式指定默认分词器: 1. 在创建索引时指定mapping,指定默认分词器,例如: ``` PUT /my_index { "mappings": { "_default_": { "properties": { "my_field": { ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • RabbitMQ 队列消息的条数限制、队列字节长度限制、队列溢出行为方式 31376
  • TCP/IP五层协议体系结构的各层功能 27338
  • maven导入依赖失败问题——最系统、最彻底的解决方案 19671
  • git常用命令与常见面试题总结 19658
  • mysql:insert并发问题(on DUPLICATE KEY UPDATE) 14676

分类专栏

  • ElasticSearch 10篇
  • ZeroTeHero 1篇
  • java集合 2篇
  • Java设计模式 27篇
  • 数据结构与算法 4篇
  • 常用API 4篇
  • 面试系列 23篇
  • Nginx 5篇
  • MySQL 12篇
  • maven 6篇
  • git 4篇
  • spring 12篇
  • Java基础 9篇
  • 消息中间件-rabbitmq 2篇
  • Java-Web基础 11篇
  • 《深入理解Java虚拟机》 学习笔记分享 1篇
  • 项目总结汇总篇 3篇
  • Linux 4篇
  • 资料分享 1篇
  • 深入理解java虚拟机系列 1篇
  • idea操作 4篇
  • HanClouds
  • 每日一句:From Zero To Hero 6篇

最新评论

  • TCP/IP五层协议体系结构的各层功能

    璃叶与枫: 真的很清晰,受教了♥

  • 系统学习maven——(3)maven仓库

    才行月色·万年欢: 非常感谢作者 我的问题总算解决了

  • java集合之间的相互转换——高效、完整

    xiaoBillows: 感谢感谢表情包表情包表情包

  • ElasticSearch系列18:Mapping 设计指南

    love.李: 你好,我有个问题想请教一下, 我做了个商品的搜索,在索引商品属性数据的的时候,每个分类有不同的属性,比如电脑: {"CPU":"486","内存":"128M"...},手机{"屏幕":"128*768","款式":"折叠"...}。。。。我用nested,object类型存储这些商品属性,当的分类 太多的时候,自动生成的properties越来越多,导致 mappings过大,都 不能索引了,请问我怎么去设计 这个mappingsr商品属性?

  • lambda与Stream流——函数式编程,资料分享

    Zhang895341748: 兄弟,下载链接点进去404,能在分享下吗

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 干货 | Elasticsearch 8.X 性能优化实战
  • ElasticSearch系列18:Mapping 设计指南
  • 【Java 面试题系列 06】时间复杂度是个啥?
2023年1篇
2020年30篇
2019年112篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司茂名英文网站建设公司抚州网络营销报价济源网页制作报价大芬SEO按天扣费哪家好宝安网站制作设计哪家好伊犁品牌网站设计黄冈seo网站推广报价吉林网站推广系统哪家好平湖网站排名优化多少钱飞来峡seo推荐迁安网站优化推广价格泰安网站制作设计哪家好德阳seo优化哪家好成都关键词排名哪家好梅州品牌网站设计价格红河外贸网站制作报价池州网络营销推荐邵阳SEO按天计费哪家好鞍山网站搭建公司威海网站改版报价光明网站优化推广价格巴中关键词按天扣费哪家好朔州外贸网站设计公司甘南网站排名优化推荐商洛阿里店铺运营桐城至尊标王毕节网站改版报价绵阳外贸网站设计哪家好南平网站推广工具六安网站制作歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化