熟练使用 ElasticSearch

ElasticSearch是一个基于Lucene的分布式全文搜索引擎,以其高效、灵活的特性广泛应用于大数据和云计算场景。相较于MySQL,ElasticSearch在海量数据查询中表现出色,即使关键词输入不准确也能找到相关数据。它支持RestFul接口,便于操作。与Solr相比,ElasticSearch搭建集群更简单,社区活跃,文档丰富。本文深入探讨ElasticSearch的分片、副本、字段类型以及查询语法,包括Term、Match、Multi_match等多种查询方式,并提供了Java操作ElasticSearch的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1.1为什么要使用ElasticSearch来进行 查询

①,在海量数据查询中,MySQL的效率太低了
②,如果关键字输入的不准确,ElasticSearch一样可以搜索到想要的数据
③,将搜索的关键之以红色的字体展示

1.1.2 ElasticSearch的介绍

①,ELasticSearch是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的RestFul风格的WEB接口,官方客户端也对多种语言都提供了相应的API

    1.1.2.1  Lucene:Lucene本身就是一个搜索引擎的底层,也提供了一些功能,但是Lucene的功能不是很全面,让用户去使用的时候是很麻烦的(Apache下的顶级项目)
    1.1.2.2  ElasticSearch就是基于Lucene封装出来的,并且提供的功能更加完善

②,分布式:ES主要是为了突出它的横向扩展力,也就是搭建集群

④,全文检索:将一段词语进行拆分,并且将分出的单个词语统一的放到一个分词库中,在搜索的时候,关键字回到分词库1检索,找到匹配的内容(倒排索引)。

⑤,RestFul风格的WEB接口:操作ELasticSearch很简单,只需要发送一个HTTP请求,并且根据,请求方式的不同,携带参数的不同,执行相应的功能。

⑥,应用广泛:GItHub.com,WIKI,Gold Man用ElasticSearch每天维护10TB的数据

1.1.3 ES的由来

在这里插入图片描述

1.1.4 ElasticSearch和Solr的区别

①,Solr在查询死数据(死数据 就是 说固定的数据,一条不能多,也条不能少)的时候,速度相对于ElasticSearch更快一些。但是数据是实时改变的,Solr的查询熟读会降低很多,而ElasticSearch的查询效率基本上是没有变化的
②,搭建集区:Solr需要Zookeeper来帮助管理(这样的话成本就比较高了),而ElasticSearch本事就支持搭建集群,相对于Solr成本低一些,并且效率更高,并且ElasticSearch不需要第三方打的介入
③,最开始Solr的社区可以说是非常火爆的,针对国内的文档并不是很多,在ElasticSearch出现之后,ElasticSearch的社区火爆程度直线上升,ElasticSearch的文档是非常健全的
④,ElasticSearch现在云计算和大数据的支持的特别好

elasticsearch 与 solr 区别(2):
①,es 和 solr 都是 Java 语言开发的基于 Lucene 的搜索引擎.
②,es 天生支持分布式, solr 集群依赖 zookeeper 协调
③,es 只支持 json 格式存储, solr 支持 json /xml/pdf /csv 等
④,solr 在建立索引时, 查询性能下降, es 无此弊端
⑤,数据量大时, es 性能差别不大, solr 性能有一些下降

ElasticSearch中的查询顺序(倒排索引)

第一步:根据输入的关键字,去分词库中检索内容,并且获取响应的标识
第二步:根据分词库中检索到的标识,直接拉去指定的数据

1.1.4.1操作ES的RESTFul语法

1.GET请求:(get只能编写一些简单的查询(get的请求方式只能放到路径上))

①,Http:/ip:port/index; 查询索引信息 (Http:/ip地址:端口号/索引)
②,Http:/ip:port/index;/type/doc_id;指定文档信息 (Http:/ip地址:端口号/索引/type/索引id)

2.POST请求(post复杂的查询请求(post的请求方式可以在请求体中添加参数))

①,查询:Http:/ip:port/index/type/_search: 查询,可以再请求体中添加json字符串来代表查询条件。
②,修改:Http:/ip:port/index/type/_update:修改文档,在请求体中指定Json字符串代表修改的具体信

息。
3.PUT请求(增加):

①,添加索引:Http:/ip:port/index;:创建一个索引,需要在请求体中指定索引的信息,类型,结构
②,添加索引:Http:/ip:port/index/type/_mappings:代表创建索引时,指定索引文档存储的属性的信息。(就相当于MySQL中创建表)

4.Delete请求(删除):

①,Http:/ip:port/index; 删除跑路
②,Http:/ip:port/index/type/doc_id:删除指定的文档

1.1.4.2 ElasticSearch中的number_of_shards(分片数)

假设 IndexA 有2个分片,我们向 Index A 中插入10条数据
(10个文档),那么这10条数据会尽可能平均的分为5条存储在第一个分片,剩下的5条会存储在另一个分片中。

1.1.4.3 ElasticSearch中的number_of_replicas(备份数)

注:(在集群模式)ElasticSearch会将默认的备份数放到其他的服务器上

1.1.4.4 Field可以指定的类型

在这里插入图片描述

1.字符串(String)类型:

①,Test: 一般被用于全文检索,将当前Field进行分词
②,KeyWordcd :是不会被分词的。

2.数值类型(从大道小):

①,Long(-263~263-1):-2的63次方到次方2的63-1
②,Integer(-231~231-1): 它的大小是Long/2
③,Short(-32768 ~ 327671): ④,Byte(-128~127): 它的大小是Short/2
⑤,Double: 64位双精度IEEE 754浮点类型
⑥,Float: 32位单精度IEEE754浮点类型 它的大小是Double/2
⑦,half_float:16位半精度IEEE 754浮点类型 它的大小是Float/2
⑧,Scaled_float:缩放类型的的浮点数 根据一个long和scaled来表达一个浮点

3.时间类型

①,Date类型 针对时间类型指定具体的格式

4.布尔类型

①,Boolean用来表达true和false

1.1.4.5 创建索引并指定结构

注意:查看官网示例后发现 7.4 默认不在支持指定索引类型,默认索引类型是_doc

操作

在这里插入图片描述

添加:

在这里插入图片描述

查看索引:

在这里插入图片描述

删除索引:

在这里插入图片描述

新增文档

在这里插入图片描述
注意:文档在ELasticSearch服务中的唯一标识,_index,_type,_Id 三个内容为符合,锁定一个文档,操作是一个添加还是修改

①,自动生成_id
②,手动指定id
在这里插入图片描述

修改操作

1.覆盖式修改

在这里插入图片描述

2.doc修改(建议使用第二种)

在这里插入图片描述

删除操作

在这里插入图片描述

Java操作ElasticSearch

java添加索引属性

在这里插入图片描述

添加文档

在这里插入图片描述

修改文档

在这里插入图片描述

删除文档

在这里插入图片描述

批量添加

在这里插入图片描述

批量删除

在这里插入图片描述

ElasticSearch的各种查询

Trem&trems查询

trem的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,对你的关键字全文档分词库中去匹配内容
在这里插入图片描述

Java代码操作ElasticSearch中的trem

在这里插入图片描述

Trems查询

注意::trems和term查询机制是一样的,都不会将指定的查询关键字进行分词,直接去分词库中匹配,找到响应的文档内容
例如:
terms实在针对一个字段包含多个值得时候使用
Term: where peovice =北京
Terms: where pervoice = 北京 or provoice = ? or …
在这里插入图片描述

Java代码操作ElasticSearch中的trems

在这里插入图片描述

Match 查询

Match_all查询全部

注意:Match_all只是查询所有全部内容,不指定任何查询条件(除了分页)
在这里插入图片描述

Java代码操作ElasticSearch中的Match_all

在这里插入图片描述

Match查询

指定一个Field作为筛选条件(去ik分词器中查找获取响应的规则)
在这里插入图片描述

Java代码操作ElasticSearch中的Match

在这里插入图片描述

Match布尔查询

在这里插入图片描述

Java操作ElasticSearch的Match布尔查询

在这里插入图片描述

Multi_match查询

在这里插入图片描述
就相当于数据库中 select * from table where name = 封瑞and age=”封瑞”

Java操作ElasticSearch的Multi_Match布尔查询

在这里插入图片描述

根据Id查询

在这里插入图片描述
相当于select * from table where id in (40,20,4)
在这里插入图片描述

Prefix 按照按照开头查询

在这里插入图片描述

java查找ElasticSearch中的perfix查询

在这里插入图片描述
相当于MySQL中的 select * from table where name like “封%”

Fuzzy查询

模糊查询,我们输出的字符大概,ES就可以去输入的内容去匹配一下结果
在这里插入图片描述

java操作ElasticSearch中的Fuzzy查询

在这里插入图片描述

Wildcard查询

这个就相当于java中的通配符 例如:select * from where name like “封*”
在这里插入图片描述

java操作ElasticSearch中的Wildcard查询

在这里插入图片描述

Range查询

在这里插入图片描述

Java操作ElasticSearch中的Range查询

在这里插入图片描述

Regexp查询

正则查询,通过你编写的正则表达式去匹配内容
Ps:prefix ,fuzzy,wildcard和regexp查询效率相对较低,要求效率比较低的时候,避免去使用
.在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值