ES多索引(multi_index)和多索引类型(multi_type)搜索

ElasticSearch为了简化搜索需求,提供了比较强大的API功能。通常如果需要搜索多个索引中的数据时,一般可能需要搜索多次,但是ES中为同时搜索多个索引和多个索引类型提供了强大的API支持,即multi_index和multi_type,可以再一次搜索请求中同时搜索多个索引或者同一个索引下多个类型中(注意:高版本不支持多类型)的数据。

温馨提示:本博客已经发布小程序,可在微信小程序中搜索”百变码农”,手机上也能看!

1、multi_index和multi_type语法
(1)搜索所有索引下所有类型中的数据
语法:
GET _search
(2)搜索某一个索引下的所有数据
语法:
GET /index/_search

例:搜索user_index下的所有数据:

GET /user_index/_search

但是在最新版本的6.x ES中,一个索引下只能有一个类型,所以也就相当于是搜索user_index下的唯一一个类型中的数据。

(3)同时搜索某几个索引下的所有数据
语法:
GET /index1,index2/_search

例:搜索index_log_day01和index_log_day02中的日志数据

GET /index_log_day01,index_log_day02/_search
(4)根据通配符搜索某几个匹配的索引下的所有数据
语法:
GET /pattern1,pattern2/_search

例:搜索log_index和user_index开头的所有所有索引中的数据

GET /log_index*,user_index*/_search
(5)搜索某一个索引下某个类型中的所有数据,最常用的
语法:
GET /index_name/index_type/_search

例:搜索user_index索引中user_type下的所有数据

GET /user_index/user_type/_search

注意:默认会返回10条数据,如果需要返回更多,需要指定分页参数

(6)搜索某几个索引下指定类型名称的索引下的数据
语法:

GET /index,index,[...]/type1,type2,[...]/_search

例:同时搜索user_index和student_index下的baseType,extType中的数据

GET /user_index,student_index/baseType,extType/_search

注意:高版本6.x中不支持一个索引下多个类型,所以该方式也只是适用于低版本中。

(7)搜索所有索引中某几个指定类型的索引下的所有数据
语法:
GET /_all/type1,type2/_search

示例:搜索所有索引下类型名称为baseType,logType的索引下的数据

GET /_all/baseType,logType/_search

注意版本。最新版本不支持多个类型,只能搜索所有索引中某个类型下的数据。

2、multi_index和multi_type的搜索原理

在之前文章中,介绍过单个普通搜索时的搜索过程,每次搜索只会先随机请求到某一个shard上。在multi_index和multi_type中搜索时,由于同时搜索好几个索引,所以一次性会同时将请求随机发送到多个shard上。过程如下:

(1)客户端程序发出一个multi_index或者multi_type的搜索请求;

 

(2)ES客户端将多索引搜索请求解析为多个索引上的搜索请求,并同时发送到多个shard上,此时会出现多个coordinate shard协调节点;

 

(3)每个协调节点根据本次的请求报文,将请求路由到数据所在的多个replica shard上;

 

(4)每个shard将请求结果汇总,返回给协调节点,然后多个协调节点将结果在返回给ES客户端,最后由ES客户端将每个协调节点上的数据汇总返回给应用程序。

 

至此,multi_index和multi_type常见的用法及搜索过程介绍完毕,欢迎转发该文章!

温馨提示:如果小程序端代码显示混乱,是因为移动端兼容性导致,可移步至PC端站点查看!

文章属于原创,如果转发请标注文章来源:个人小站【www.jinnianshizhunian.vip

另外提供一些优秀的Java架构师及IT开发视频,书籍资料。无需注册,无需登录即可下载,免费下载地址:https://www.592xuexi.com