es学习记录

Elasticsearch 是一个实时的分布式搜索分析引擎它被用作全文检索、结构化搜索、分析以及这三个功能的组合内部使用 Lucene 做索引与搜索。

1.es的实际应用

 

2.es全文检索简单介绍

基础概念带过一下

Index 可类比为DBMS的库

Type 可类比一张表

Document 可类比一条数据

全文检索要求一个词语或一段话在整个文档中被搜索,传统的数据库每个字段存储单个值,这对全文检索并不够文本字段中的每个单词需要被搜索,对数据库意味着需要单个字段有索引多值(这里指单词)的能力,平常我们对字符串类型的字段一般不会建索引,一方面文本多变,没什么规律,另一方面对文本搜索的要求可能也不太大。Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索

一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。倒排索引也叫segements一个数据集假设我们有两个文档,每个文档的 content 域包含如下内容:

  1. The quick brown fox jumped over the lazy dog
  2. Quick brown foxes leap over lazy dogs in summer

es将每个文档的 content 域拆分成单独的 词(我们称它为 词条 或 tokens ),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。如下所示:

Term Doc_1 Doc_2

-------------------------

Quick | | X

The | X |

brown | X | X

dog | X |

dogs | | X

fox | X |

foxes | | X

in | | X

jumped | X |

lazy | X | X

leap | | X

over | X | X

quick | X |

summer | | X

the | X |

3.文档如何被搜索

倒排索引这种数据结构能帮助实现这个功能。相比特定词项出现过的文档列表,会包含更多其它信息。它会保存每一个词项出现过的文档总数,在对应的文档中一个具体词项出现的总次数,词项在文档中的顺序,每个文档的长度,所有文档的平均长度,等等。这些统计信息允许 Elasticsearch 决定哪些词比其它词更重要,哪些文档比其它文档更重要一个 Lucene 索引包含一个提交点和三个段 说明:无特别说明表示图是自创的

摘抄图

一个 Elasticsearch Index 由一个或者多个 shard (分片) 组成。

摘抄图

摘抄图

Lucene index 相当于 ES 的一个 shard。

摘抄图

近乎实时索引机制了解

一个新的document过来

1不断将 Document 写入到 In-memory buffer (内存缓冲区)。

2当满足一定条件?后内存缓冲区中的 Documents 刷新到 高速缓存(cache)。

3生成新的 segment ,这个 segment 还在 cache 中。

4这时候还没有 commit 到磁盘 ,但是已经可以被读取了。

 摘抄图

数据从 buffer 到 cache 的过程是定期每秒刷新一次。所以新写入的 Document 最慢 1 秒就可以在 cache 中被搜索到Document 从 buffer 到 cache 的过程叫做 refresh 。一般是 1 秒刷新一次,不需要进行额外修改。

分析器 将字符串转换为一串 tokens(标记)标记或者 terms(词条)

分词器 采用分割算法对字符串分词

个人理解是分析器是处理文档

分词器是处理输入的词条

分析器中可以定义分词器,分词器是为了分析器服务

分析器和分词器都生成词条或词根

过滤器 filter

过滤器应用范围更为广泛,可以过滤查询,过滤结果,聚合过滤,词元过滤等

词条terms 可以简单理解为一个单词或句子 比如family

词根term 可以简单理解为一个不可以再拆的单词 比如dog,dogs可以是词根也可以不是词根.如果dogs和dog同时出现,dogs不算词根,如果是 i have some dogs,dogs可以算词根

词元token 在这里词元和词条是一个意思

4.应用中搜素大致实现流程

数据如何到es

索引情况

{"st_bigscreen_search":{"aliases":{},"mappings":{"_doc":{"properties":{"__dummy__":{"type":"integer"},"attendee_parent_meeting":{"type":"long"},"category":{"type":"long"},"category_name":{"type":"text","fields":{"raw":{"type":"keyword"}},"analyzer":"ik_max_word"},"column_id":{"type":"text","fields":{"raw":{"type":"keyword"}},"analyzer":"ik_max_word"},"column_name":{"type":"text","fields":{"raw":{"type":"keyword"}},"analyzer":"ik_max_word"},...,"settings":{"index":{"number_of_shards":"5","provided_name":"st_bigscreen_search","creation_date":"1639432375199","analysis":{"analyzer":{"first_letter_analyzer":{"tokenizer":"first_letter_tokenizer"},"comma":{"type":"custom","tokenizer":"comma"},"ngram":{"type":"custom","tokenizer":"ngram"}},"tokenizer":{"first_letter_tokenizer":...

数据示例

不同类型的数据根据type区分,定义通用的helper,各业务实现helper,构建查询对象

添加MultiSearchRequestBuilder->

ElasticsearchClient.execute->

saveResponse

使用_msearch 查询

must指定了所有查询必须为 true 时将匹配到文档

should 表示或

走后台

直接调用yapi

5.es分析器插件简单介绍

使用了ik_max_wordik_smart插件

ik_max_word会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

ik_smart会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

测试一下:

ik_max_word

ik_smart

 

使用场景思考

如果要求查询结果匹配度更高,应该考虑ik_max_word要么可以考虑选择ik_smart

一种较佳实践是:索引时用ik_max_word,在搜索时用ik_smart。

即:索引时最大化的将文章内容分词。创建索引时,设置mapping时指定分析器

6.简单es数据目录结构

Elasticsearch使用Lucene来处理分片级别的索引和查询,因此数据目录中的文件由Elasticsearch和Lucene写入。两者的职责都非常明确:

Lucene负责写和维护Lucene索引文件,

而Elasticsearch在Lucene之上写与功能相关的元数据,例如字段映射,索引设置和其他集群元数据。最终用户和支持功能。

data为数据目录结构

nodes是节点数据,启动了几个节点会有几个文件夹,从0开始

进入0

indices是索引文件

node.lock文件用于确保一次只能从一个数据目录读取/写入一个Elasticsearch相关安装信息。

_states是状态文件

看一下indices,是各个索引文件

通过uuid命名,可以用cat查看所有索引

看一下customer3

5个sharding,从0到4

index是Lucene索引文件

translog是事务日志

看一下index文件

segments是Lucene

data格式的文件

查看文件内容,是二进制数据

看一下_states

global-前缀表示这是一个全局状态文件,而.st扩展名表示这是一个包含元数据的状态文件。

mysql和es全文搜索比较

全文搜索 姓名、电话、标题或组织名称。Mysql和es查询比较

Mysql查询比较慢

记录数2379

es查询 秒查 记录数一致

说明es全文建索性能相比mysql更佳

参考地址

Elasticsearch: 权威指南 | Elastic

目录 - elasticsearch中文文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619252.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app里使用webscoket

实现思路和vue中是一样的。如果想看思路可以看这篇文章:websocket 直接上可以运行的代码: 一、后端nodeJS代码: 1、新建项目文件夹 2、初始化项目: npm init -y 3、项目里安装ws npm i ws --save 4、nodeJS代码&#xff1…

奥园地产惠州奥园誉博府提前交付 匠心品质备受认可

一直以来,奥园地产的交付工作都是备受关注的,一方面,是交付的时间非常准时,让业主充满期待;另一方面,是交付的品质一直有保障,让业主更加安心。此次奥园地产惠州奥园誉博府已经是第二次交付了&a…

首创置业“中国之家-和园”将在巴黎开工奠基

中新网1月15日电 不久的将来,巴黎国际大学城将迎来第41座由中国开发商打造的特色建筑。在日前的第二届“大师之路-中法音乐节”暨和园奠基仪式新闻发布会上,首创置业宣布“中国之家-和园”将在巴黎国际大学城开工奠基。 据悉,巴黎国际大学城已…

明喆冲刺深交所:拟募资14亿 高海清家族3年分红超7亿

雷递网 雷建平 6月28日 明喆集团股份有限公司(简称:“明喆集团”)日前递交招股书,准备在深交所主板上市。 明喆集团计划募资14亿元,其中,3.6亿元用于营销网络及品牌建设项目,3.08亿元用于信息化…

康鹏科技将于12月16日上会:曾在纽交所上市,由杨建华家族控股

近日,上海康鹏科技股份有限公司(下称“康鹏科技”)在上海证券交易所递交招股书(上会稿),准备在科创板上市。据贝多财经了解,康鹏科技将于2022年12月16日接受科创板上市委的现场审议。 根据公开信…

雅居乐陈卓林择址置业热土,耀启一城精彩

这个时代,城市的土地资源及生态人文属性,因不可再生而显得弥足珍贵。建筑可以复制,唯有资源难以再造,花溪正凭借其出色的宜居属性,成为贵阳理想的置业热土。在花溪区域发展的历程中,除最早入驻花溪的一批房…

赋能房地产企业并购

我叫徐文,目前是在一家大型房地产公司的管理层就职。近几年来,公司业绩可观,所以在几次高层会议讨论后,公司内部最终决定对其他中小企业进行兼并收购以扩大规模。而我,正是这项并购的负责人。 作为买方,我们…

Oracle组织架构

组织架构 (一)业务组(BG) (二)法律实体(LE) (三)业务实体(OU) (四)库存组织(INV) …

金源高端IPO被终止:曾拟募资7.5亿 儒杉资产与溧阳产投是股东

雷递网 雷建平 6月26日报道 江苏金源高端装备股份有限公司(简称:“金源高端”)日前在深交所创业板的IPO被终止。 金源高端计划募资7.5亿元,其中,5.5亿元用于高速重载齿轮零部件精密加工项目,5000万元用于研…

天宇优配|股权融资“松绑” 多家房企透露将有所动作

11月28日,证监会新闻发言人就资本商场支持房地产商场平稳健康发展答记者问时表明,证监会决定在股权融资方面调整优化五项办法,包含恢复涉房上市公司并购重组及配套融资;恢复上市房企和涉房上市公司再融资;调整完善房地…

嘉创房地产拟以介绍方式在港交所上市,期内营收、净利润规模可观

3月31日,嘉创房地产控股有限公司(下称“嘉创房地产”或“嘉创地产”)在港交所递交上市申请材料,拟以介绍方式在香港主板挂牌上市。据贝多财经了解,嘉创房地产分拆自港交所上市公司嘉利国际(HK:01050&#x…

STL-常用容器-queue 容器(队列)

1 queue 基本概念 概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。 队列容器允许从一端新增元素,从另一端移除元素 队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为 队列中进数据…

JS-this知识点、面试题

一、this指向什么 1.简介 2.规则一:默认绑定 3.规则二:隐式绑定 4.规则四:new绑定 5.规则三:显式绑定 call、apply、bind 6.内置函数的绑定 7.规则优先级 8.this规则之外--es6剪头函数 9.ES6剪头函数this 二、This面试题 面试题…

01.基于自定义MVC架构的用户登录与首页展示实现 — OA项目实践

目录 本章节目标:完成OA项目用户登录及首页展示 一.用户登录 User.java UserDao.java IUserDao.java UserAction.java login.jsp(登录界面) userManage.jsp (数据绑定,修改,删除) userEdit.jsp(用…

Python WEB框架之FastAPI

Python WEB框架之FastAPI 今天想记录一下最近项目上一直在用的Python框架——FastAPI。 个人认为,FastAPI是我目前接触到的Python最好用的WEB框架,没有之一。 之前也使用过像Django、Flask等框架,但是Django就用起来太重了,各种…

苹果手机怎么查看历史足迹

1.解锁手机,点击设置,如下图。 2.进入到设置界面,点击【隐私】选项,如下图。 3.进入到隐私界面,点击【定位服务】,如下图。 4.进入定位服务界面,点击【系统服务】,如下图。 5.在打开…

苹果uwb定位技术

昨天的文章简单说明了手机定位的技术,文章写的比较简单,但是阅读量却还可以,这篇文章转一个uwb定位技术的文章,让更多的人了解这项技术。 相关阅读: 手机是怎么确定位置信息的? 载波和LoRa #前言 关于昨天的…

常见手机定位方式浅谈

引言 前段时间在知乎上回答了一个关于手机定位相关的问题,被一个知友问到“加一个人微信聊天之后,收到了人家的一个视频,随后也把这个人及他发的视频都删除了,几天后在网吧上网,被别人定位到了,勒索了一笔钱…

苹果手机如何显示定位服务器地址,iOS8定位服务在哪?苹果iPhone6/Plus开启或关闭定位方法图文介绍...

以下是具体的iPhone6/Plus开启或关闭定位方法,适合所有iOS8系统的iPhone设备。 iOS8定位服务在哪? 定位服务关系用户隐私方面的东西,因此iOS8定位服务在iOS8设置中的“隐私”设置中,大家可以在下面的iOS8开启或者关闭定位服务教程…

小程序定位苹果手机可以,但是安装手机获取不到定位

1.确认是否开通定位权限 如果还没有权限,就去申请:申请时 注明场景,多上传几张 那个位置需要上传的照片 更容易通过本人申请场景(参考):需要获取工人拍照验收位置照片注明定位位置时间,验证工人师傅在现场 审核是否通…