Elasticsearch学习,请先看这篇!

这篇具有很好参考价值的文章主要介绍了Elasticsearch学习,请先看这篇!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、初始elasticsearch

1、概述

简介

发展

2、倒排索引

3、基本概念

文档

索引

Mysql和es的区别

4、分词器

初始分词器

Ik分词器-扩展词库

二、索引库操作

1、mapper属性

2、创建索引库

 3、查询、删除索引库

三、文档操作

1、新增文档

 2、查询、删除文档

 3、修改文档

四、RestClient

1、什么是RestClient

2、JavaRestClient

建立mapping映射

初始化JavaRestClient

创建索引库

操作索引库

操作文档

五、DSL查询文档

1、DSL查询语法

查询所有

全文检索查询

精确查询

地理查询

复合查询

2、搜索结果处理

排序

分页

高亮

3、RestClient


一、初始elasticsearch

1、概述

简介

es是一款强大的开源搜索引擎,开源帮助我们从海量数据中快速找到需要的内容

elasticsearch是elastic stack(ELK)包含Kibana、Logstash、Beats

Elasticsearch学习,请先看这篇!

发展

Lucene

Lucene是java语言的搜索引擎类库,apache公司顶级项目,1999年研发

优点易扩展,高性能(基于倒排索引),缺点只限于java语言,学习曲线陡峭,不支持水平扩展

Compass

2004是由shay banon基于Lucene开发的

elasticsearch

2010年Shay banon重写了Compass并取名为elasticsearch

比lucene的优点:支持分布式,可水平扩展。提供restful,可被任何语言调用

2、倒排索引

传统的正向索引:例如下面的图,会去从1开始一条条模糊匹配任何匹配的放到结果集返回了,如果有1000万条数据,就要扫描1000万次

Elasticsearch学习,请先看这篇!

倒排索引:

文档(document):每个商品就是文档,

词条(term):文档按照语义分成的词语

就是把词语先分词提前存好,每个词语对应的id,当我们要搜索的时候就通过词语拿到所有匹配的id来返回,这种方式的效率就比原本正向的高很多。

Elasticsearch学习,请先看这篇!

 Elasticsearch学习,请先看这篇!

适用场景:更适合基于文档去搜索内容,比如搜索异常信息和局部的单词搜索等等。

3、基本概念

文档

es是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息

文档数据会被序列化为json格式后存储在es中

索引

相同类型的文档的集合

映射mapping:索引中文档的字段约束信息,类似表的结构约束

Elasticsearch学习,请先看这篇!

Mysql和es的区别

Elasticsearch学习,请先看这篇!

mysql擅长事务类型操作,可以保证数据安全和一致

es擅长海量数据的搜索、分析、计算

Elasticsearch学习,请先看这篇!

4、分词器

初始分词器

es在创建倒排索引时需要对文档分词,在搜索时,需要对用户输入内容分词,但默认分词规则对中文处理不好,中文会被分成一个个的字

处理中文分词,一般用IK分词器

安装IK分词器:找到数据局目录,然后把安装好的ik分词器,解压分词器安装包,放到es容器的插件数据卷中,重启容器。

Elasticsearch学习,请先看这篇!

 Elasticsearch学习,请先看这篇!

ik_smart粗力度划分,分的词语不够多但是占用内存小

ik_max_word细粒度划分,分的词语多匹配更加多,但是内存大

Ik分词器-扩展词库

我们发现很多词语是没有的,不会自动分词,比如一些新的网络词汇,要扩展ik分词器,只需要修改ik分词器目录中config目录中的ikAnalyzer.cfg.xml文件,然后在里面写上文件

Elasticsearch学习,请先看这篇!

不仅仅可以扩展,还可以禁止一些词语,比如分的时候“的”字就是没有意义还占用内存,还有紧张搜索的敏感词汇也可以禁止了

Elasticsearch学习,请先看这篇!

Elasticsearch学习,请先看这篇!

二、索引库操作

1、mapper属性

mapping是对索引库中文档的约束,常见的mapping属性包括:

type:字段数据类型,常见的简单类型有:

  • 字符串:text(可分词的文本)、keyword(精确值,最小不能拆分的:国家、品牌、IP地址)
  • 数值:long、integer、short、byte、double、float
  • 布尔:boolean
  • 日期:date
  • 对象:Object

(在es里面是没有数组这个概念的,可以有很多个同类型的数值)

index:是否创建索引,默认为true,如果true就会创建倒排索引,将来就能搜索了,实际上并不是所有字段都需要参与搜索的,所以要手动把一些设置成false

analyzer:使用那种分词器,结合字符串的text来使用的

properties:该字段的子字段(可以指定对象的子属性)

Elasticsearch学习,请先看这篇!

2、创建索引库

ES中通过restful请求操作索引库、文档。请求内容用DSL语句来表示,创建索引库和mapping的DSL语句如下:

Elasticsearch学习,请先看这篇!

Elasticsearch学习,请先看这篇!

 3、查询、删除索引库

查询用get,删除用delete,修改用put(es没有办法修改的其实,因为每次修改要查询维护倒排索引库非常麻烦,所以修改其实是在原本的索引库里面添加新字段

 Elasticsearch学习,请先看这篇!

三、文档操作

1、新增文档

新增文档的DSL语法

Elasticsearch学习,请先看这篇!

 Elasticsearch学习,请先看这篇!

 2、查询、删除文档

Elasticsearch学习,请先看这篇!

 3、修改文档

Elasticsearch学习,请先看这篇!全量修改请求方式是put,既能做修改,也能做新增,当id没有的时候就代表新增了,他是先删除逐个id然后再新增的,如果id没有就直接增了

Elasticsearch学习,请先看这篇!

指定修改,就是修改指定的值,请求方式是post,中间的路径得改成_update

四、RestClient

1、什么是RestClient

ES官方提供了各种语言的客户端,用来操作es,这些客户端用来组装DSL语句,通过HTTP请求发送给ES

Elasticsearch学习,请先看这篇!

2、JavaRestClient

建立mapping映射

先根据数据库的表建立对应es的mapping

Elasticsearch学习,请先看这篇!

 Elasticsearch学习,请先看这篇!

 Elasticsearch学习,请先看这篇!

在es里面经纬度比较特殊,要用geo_point

需求:现在想要根据多个字段来搜索,但是多个搜索没有根据一个来搜性能好?怎么办?

es提供了组合查询,类似联合索引的概念,可以单独提出一个字段叫all,把想加进去的属性加上copy_to:all

提示:字段拷贝可以使用copy_to属性将当前字段拷贝到指定字段

Elasticsearch学习,请先看这篇!

初始化JavaRestClient

Elasticsearch学习,请先看这篇!

Elasticsearch学习,请先看这篇!

@BeforeEach是在测试方法@Test前执行,@AfterEach是在测试方法后执行,都是junit的注解

创建索引库

Elasticsearch学习,请先看这篇!

Elasticsearch学习,请先看这篇!

常量里面直接写json对象就行

操作索引库

Elasticsearch学习,请先看这篇!

索引库操作的基本步骤:

  • 初始化RestHighLevelClient
  • 创建XxxlndexRequest。XXX是CREATE、Get、Delete
  • 准备DSL (CREATE时需要)
  • 发送请求。调用RestHighLevelClient#indices().xxx()方法,xxx是create、exists、delete

操作文档

新增

Elasticsearch学习,请先看这篇!

要用过fastJson工具类把对象序列化为json对象存到es

查询

Elasticsearch学习,请先看这篇!

修改 

Elasticsearch学习,请先看这篇!

删除

Elasticsearch学习,请先看这篇!

批量导入

Elasticsearch学习,请先看这篇!

文档操作的基本步骤

  • 初始化RestHighLevelClient
  • 创建XxxRequest。XXX是Index、Get、Update、Delete
  • 准备参数 (index和Update时需要)
  • 发送请求。调用RestHighLevelClient#xxx0方法,xxx是
  • index、get、update、delete
  • 解析结果(Get时需要)

五、DSL查询文档

1、DSL查询语法

DSL是基于restful风格的查询语句,用来查询es的

查询语句分类:

  • 查询所有:查询出所有数据,一般测试用。例如:match all
  • 全文检索 (fulltext)查询: 利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:
    • match query
    • multi_match query
  • 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
    • ids
    • range
    • term
  • 地理(geo)查询: 根据经纬度查询。例如:
    • geo distance
    • geo_bounding_box
  • 复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如
    • bool
    • function_score

查询所有

Elasticsearch学习,请先看这篇!

由于查询所有并不需要指定条件,所以条件值不用写

全文检索查询

Elasticsearch学习,请先看这篇!

我们搜索的时候尽量使用match搜一个字段,然后用all就可以把多个属性放到一个字段来搜索,这样效率比直接搜多个字段快

  • match:根据一个字段查询
  • multi match:根据多个字段查询,参与查询字段越多,查询性能越差

精确查询

精确查询一般查询keyword、数值、日期、boolean等类型字段,所以不会对搜索条件进行分词

  • term:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
  • range: 根据数值范围查询,可以是数值、日期的范围

Elasticsearch学习,请先看这篇!

地理查询

根据经纬度查询,官方文档,例如:

geo_bounding_box:适合查询一定范围内所有的信息。 

Elasticsearch学习,请先看这篇!geo_distance:查询到指定中心店小于某个距离值的所有文档,适合做附近的人

Elasticsearch学习,请先看这篇!

复合查询

复合查询:复合查询可以将其他简单查询组合起来,实现更复杂的搜索逻辑

fuction score:算分函数查询,可以控制文档相关性算法,控制文档排名

es中相关打分算法:

TF-IDF:es5.0之前,会虽则词频增大而越来越大

BM25:在es5.0之后,词频增大,但增长曲线会趋于水平

Elasticsearch学习,请先看这篇!

Elasticsearch学习,请先看这篇!

Function Score Query

Elasticsearch学习,请先看这篇!

Boolean Query

布尔查询是一个或多个查询子句的组合,子查询的组合方式有:

must:必须匹配每个子查询,类似与

should:选择性匹配子查询,类似或

must_not:必须不匹配,不参与算分,类似非

filter:必须匹配,不参与算分

Elasticsearch学习,请先看这篇!

下面这些就固定的不参与算分,可以提高搜索效率,而且这种不参与算分的往往会放到缓存里,进一步提高效率,参与算分条件越多,查询的性能越差

Elasticsearch学习,请先看这篇!

图中:must_not来查询价格,小于500的,就是要查实际上大于500的,之所以用这个反着查就是为了提高效率,因为不用参与算法,而且这个价格的权重也不重要,所有这样效率最高,项目filter搜分大于45也是如此,关键词才需要参与算分的,不参与算分全部放到must_not和filter里面

2、搜索结果处理

排序

es支持对结果进行排序,默认是根据分值排序,可以排序的字段类型:keyword类型、数值类型、地理坐标类型、日期类型等

Elasticsearch学习,请先看这篇!

 Elasticsearch学习,请先看这篇!

分页

es默认情况只返回top10的数据,而如果要查询更多数据就需要修改分页参数了

es中通过from、size参数来控制要返回的分页结果: 

Elasticsearch学习,请先看这篇!

ES是分布式的,所有会面临深度分页问题,例如按price排序后,获取from=990,size为10的数据

Elasticsearch学习,请先看这篇!

深度分页解决方案

针对深度分页,es提供两种解决方案

search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式

scroll:原理将排序数据形成快照,保存在内存,官方已经不推荐使用。(内存消费非常大,而且将来es一更新快照还是旧的数据)

Elasticsearch学习,请先看这篇!

高亮

Elasticsearch学习,请先看这篇!

如图我们可以观察到,搜索出来的结果会高亮,其实加了标签,是谁加的呢?其实是es服务端加的,他给关键字加了标签,然后返回给前端。

Elasticsearch学习,请先看这篇! Elasticsearch学习,请先看这篇!

 require_field_match为false代表搜索的属性不一定要匹配,用all来搜可以高亮name的

3、RestClient

搜索全部

Elasticsearch学习,请先看这篇!

解析对象Elasticsearch学习,请先看这篇!

全文检索查询

Elasticsearch学习,请先看这篇!

精确查询

Elasticsearch学习,请先看这篇!

boolean查询

Elasticsearch学习,请先看这篇!

排序和分页

Elasticsearch学习,请先看这篇!

高亮

先看看请求的DSL构建

Elasticsearch学习,请先看这篇!

高亮结果处理

Elasticsearch学习,请先看这篇!

总结

所有的DSL构建,都是用SearchRequest的source()方法文章来源地址https://www.toymoban.com/news/detail-424478.html

到了这里,关于Elasticsearch学习,请先看这篇!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux,看这篇就够了

    因为我们要部署服务,Linux系统一直以其稳定性而闻名,它们可以连续运行多年而不发生任何重大问题。事实上,很多Linux用户都从未在自己的环境中遇到过系统崩溃的情况。相对windows而言,挂起和崩溃完全是一种常态。 Windows由于是商业产品,源代码封闭,我们无法知道微软

    2024年02月08日
    浏览(44)
  • 测试基本理论-看这篇就够了

    软件测试(Software Testing): 在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 【系统软件】:如操作系统、数据库管理系统,各种驱动软件等; 【应用软件】:如Office、有道翻译、QQ等; 【单机版本】:如Office,

    2024年02月06日
    浏览(48)
  • 面向对象编程,看这篇就够了

    面向对象编程,是一种程序设计范式,也是一种编程语言的分类。它以对象作为程序的基本单元,将算法和数据封装其中,程序可以访问和修改对象关联的数据。这就像我们在真实世界中操作各种物体一样,比如我们可以打开电视、调整音量、切换频道,而不需要知道电视的

    2024年02月05日
    浏览(77)
  • 关于SpringBoot框架,看这篇就够了。

    目录 是什么 有什么优点、解决了哪些问题 创建第一个以springboot项目 starter 核心配置文件application.yml或properties application中的配置项 springboot的启动流程 自定义banner 整合日志打印 整合druid数据源 处理异常 常用的注解 Configuration Import conditional ConfigruationProperties 基于springboot的

    2024年02月06日
    浏览(49)
  • 关于信贷评分卡模型,看这篇就够了!

    风险并不是所有人都能轻松看到,信贷公司同样如此。 8月4日下午15:00,顶象研发总监就评分卡模型展开分享,详细介绍了评分卡模型的原理、评分卡模型的构建过程、评分卡模型的开发投产以及顶象的评分卡模型实践。 评分卡模型原理 通常来说,我们把贷款分为抵押贷款

    2024年02月12日
    浏览(41)
  • Redis基础命令汇总,看这篇就够了

    本文首发于公众号:Hunter后端 原文链:Redis基础命令汇总,看这篇就够了 本篇笔记将汇总 Redis 基础命令,包括几个常用的通用命令,和各个类型的数据的操作,包括字符串、哈希、列表、集合、有序集合等在内的基本操作。 以下是本篇笔记目录: 通用命令 字符串命令 哈希

    2024年02月04日
    浏览(48)
  • 倾向得分匹配只看这篇就够了

    倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的,首次运用在生物医药领域,后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素(干扰因素)的偏差。 ‍1、基本原理——反事实推断 基本原理是 :根据处理组的特征,

    2024年02月05日
    浏览(45)
  • 自学黑客(网络安全)看这篇就够了

    写了这么多编程环境和软件安装的文章,还有很多小伙伴在后台私信说看不懂。我都有点头疼了,但是小伙伴们求学的心情我还是能理解,竟然这么多人给我反馈了,那我就再写一篇网络安全自学的教程吧!大家耐心看完,后面有惊喜。 一、自学网络安全的误区和陷阱 1.不要

    2024年02月06日
    浏览(58)
  • TensorBoard最全使用教程:看这篇就够了

    机器学习通常涉及在训练期间可视化和度量模型的性能。 有许多工具可用于此任务。 在本文中,我们将重点介绍 TensorFlow 的开源工具套件,称为 TensorBoard,虽然他是TensorFlow 的一部分,但是可以独立安装,并且服务于Pytorch等其他的框架。 TensorBoard 是一组用于数据可视化的工

    2024年01月17日
    浏览(47)
  • 了解《单链表》看这篇就好了(内含动图)!!!

    🎇🎇🎇作者: @小鱼不会骑车 🎆🎆🎆专栏: 《java练级之旅》 🎓🎓🎓个人简介: 一名专科大一在读的小比特,努力学习编程是我唯一的出路😎😎😎 通过前面讲到了顺序表,也可总结出线性表顺序存储结构的优缺点: 优点: 无须为表示表中元素之间的逻辑关系而增加

    2024年01月17日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包