Elasticsearch增删改查 之 —— mget多文档查询
之前说过了针对单一文档的增删改查,基本也算是达到了一个基本数据库的功能。本篇主要描述的是多文档的查询,通过这个查询语法,可以根据多个文档的查询条件,返回多个文档集合。
更多内容可以参考我整理的ELK文档教程
multi Get
多字段查询可以设置多个文档查询条件,每个查询条件在结构上都比较类似:
curl 'localhost:9200/_mget' -d '{"docs" : [{"_index" : "test","_type" : "type","_id" : "1"},{"_index" : "test","_type" : "type","_id" : "2"}]
}'
当然,在查询条件中,body中_index字段也可以放在查询字符串中:
curl 'localhost:9200/test/_mget' -d '{"docs" : [{"_type" : "type","_id" : "1"},{"_type" : "type","_id" : "2"}]
}'
对于type也是一样:
curl 'localhost:9200/test/type/_mget' -d '{"docs" : [{"_id" : "1"},{"_id" : "2"}]
}'
如果索引和类型都放在查询URL中,那么字段ID就可以放在一个数组中:
curl 'localhost:9200/test/type/_mget' -d '{"ids" : ["1", "2"]
}'
type可选
mget查询中类型type是可选的。如果设置_all或者不设置,就会匹配所有的类型,那么仅仅会返回第一个匹配的文档。
但是如果没有设置type,然后查询的id里面又出现两个一样的id,就会返回第一次匹配的文档两次:
curl 'localhost:9200/test/_mget' -d '{"ids" : ["1", "1"]
}'
因此如果想要查询到不同类型的id,就需要指定类型名称:
GET /test/_mget/
{"docs" : [{"_type":"typeA","_id" : "1"},{"_type":"typeB","_id" : "1"}]
}
_source过滤
默认_source
字段会返回所有的内容,你也可以通过_source
进行过滤。比如使用_source
,_source_include
,_source_exclude
.
比如:
curl 'localhost:9200/_mget' -d '{"docs" : [{"_index" : "test","_type" : "type","_id" : "1","_source" : false},{"_index" : "test","_type" : "type","_id" : "2","_source" : ["field3", "field4"]},{"_index" : "test","_type" : "type","_id" : "3","_source" : {"include": ["user"],"exclude": ["user.location"]}}]
}'
Fields过滤
与其他的普通查询差不多,mget查询也支持Fields过滤。
curl 'localhost:9200/_mget' -d '{"docs" : [{"_index" : "test","_type" : "type","_id" : "1","fields" : ["field1", "field2"]},{"_index" : "test","_type" : "type","_id" : "2","fields" : ["field3", "field4"]}]
}'
也可以在URL中的查询字符串中设置默认的过滤,然后在Body中进行特殊的修改:
curl 'localhost:9200/test/type/_mget?fields=field1,field2' -d '{"docs" : [{"_id" : "1" },{"_id" : "2","fields" : ["field3", "field4"] }]
}'
id1的文档就会返回field1和field2,id2的文档就会返回field3和field4.
路由
在mget查询中也会涉及到路由的问题。可以在url中设置默认的路由,然后在Body中修改:
curl 'localhost:9200/_mget?routing=key1' -d '{"docs" : [{"_index" : "test","_type" : "type","_id" : "1","_routing" : "key2"},{"_index" : "test","_type" : "type","_id" : "2"}]
}'
在上面的例子中,test/type/1
按照key2
这个路由锁定分片进行查询;test/type/2
按照key1
这个路由锁定分片进行查询。
实际演练
首先创建两个文档:
curl -XPOST localhost:9200/test/_mget?pretty -d '{"ids":["1"]}'
curl -XPOST localhost:9200/test/testb/1?pretty -d '{"name":"b","age":122}'
如果不指定type,那么返回的仅仅是一个最先匹配的结果:
$ curl -XPOST localhost:9200/test/_mget?pretty -d '{"ids":["1"]}' {"docs" : [ {"_index" : "test","_type" : "testb","_id" : "1","_version" : 2,"found" : true,"_source" : {"name" : "b","age" : 122}} ]
}
如果指定了重复的id,则返回的是多次第一次匹配的文档:
$ curl -XPOST localhost:9200/test/_mget?pretty -d '{"ids":["1","1"]}' {"docs" : [ {"_index" : "test","_type" : "testb","_id" : "1","_version" : 2,"found" : true,"_source" : {"name" : "b","age" : 122}}, {"_index" : "test","_type" : "testb","_id" : "1","_version" : 2,"found" : true,"_source" : {"name" : "b","age" : 122}} ]
}
如果指定了类型,再去查询,则返回的是各自的id:
$ curl -XPOST localhost:9200/test/_mget?pretty -d '{"docs":[{"_type":"testa","_id":"1"},{"_type":"testb","_id":"1"}]}'
{"docs" : [ {"_index" : "test","_type" : "testa","_id" : "1","_version" : 1,"found" : true,"_source" : {"name" : "a","age" : 31}}, {"_index" : "test","_type" : "testb","_id" : "1","_version" : 2,"found" : true,"_source" : {"name" : "b","age" : 122}} ]
}
转载于:https://www.cnblogs.com/xing901022/p/5335151.html
Elasticsearch增删改查 之 —— mget多文档查询相关推荐
- 仿抖音短视频用户业务模块----完成用户信息增删改查并通过接口文档联调(模拟工作环境)
仿抖音项目持续更新中: 仿抖音短视频APP专栏 练习: 目录 1.根据nickname或者mobile来查询用户信息 2.根据用户id删除用户信息 3.根据用户id修改用户信息 1.根据nicknam ...
- elasticsearch 增删改查(CRUD)
elasticsearch 增删改查(CRUD) 本文阅读前提: 1.已经安装了elasticsearch.可以参考:http://blog.csdn.net/wild46cat/article/de ...
- oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...
SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...
- Elasticsearch增删改查 之 —— Delete删除
删除文档也算是常用的操作了...如果把Elasticsearch当做一款普通的数据库,那么删除操作自然就很常用了.如果仅仅是全文检索,可能就不会太常用到删除. Delete API 删除API,可以根 ...
- elasticsearch增删改查实现
1.操作索引 1.1.基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的. 对比关系: 索引(indices)------------- ...
- Spring Data ElasticSearch增删改查
Spring Data ElasticSearch 一.介绍 ElasticSearch 学习路线图 1.学习ElasticSearch安装及其API操作 2. 学习原生ElastricSearch ...
- ElasticSearch增删改查之python sort、scroll、scan
1.用python操作elasticsearch有两个库可以调用 # ElasticSearch不支持scroll(分页查询)查询 from pyelasticsearch import Elasti ...
- Elasticsearch增删改查
2019独角兽企业重金招聘Python工程师标准>>> elasticsearch_rtf_1.3-master链接:http://pan.baidu.com/s/1qYH7w8O ...
- MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union
接进阶篇①,我们继续学习. 一.联合查询 1.1 内连接 1.2 外连接 1.3 内连接和左右外连接的区别 二.自连接 三.子查询 3.1 单行子查询 3.2 多行子查询 使用 in 范围匹配多行 另 ...
- MySQL - 表的增删改查(约束+聚合、联合查询)
本节目标: 数据库约束 表的关系 新增: 删除 修改 查询 1.数据库约束 1.1约束类型 NOT NULL -指示某列不能存储 NULL值. UNIQUE -保证某列的每行必须有唯一的值. DEFA ...
最新文章
- ECMAScript 6 学习笔记(一)
- php赋值给jq,jquery怎么给div赋值
- when is backend date format set in Javascript DateFormat
- Linux 格式化磁盘命令mkfs
- 缓慢的http拒绝服务攻击 tomcat_攻击技术
- power bi可视化表_滚动器可视化功能,用于Power BI Desktop中的股价变动
- 结合CDIB类,对图像的打开、显示、保存
- Objective-C 常用代码
- wmp12功能打不开_使用Windows Media Player Plus向WMP添加新功能
- SAP固定资产模块的表
- 关于工作中的相关问题的看法和建议 (一)JAVA小组的调整问题
- Java数据类型:基本数据类型和引用数据类型
- 如何利用Python在网上接单,兼职也能月薪过万
- access通过身份证号提取性别_Access计算根据身份证号码字段计算年龄和性别的表达式,最好是还能确定户籍地址,该在什么地方输入?...
- [扩展阅读] EasyGUI 学习文档【超详细中文版】
- 【STM32CubeMX安装】
- JavaScript-狂神说笔记
- 可视化实验十一:利用Python绘制气泡图、雷达图
- 超级计算机 噪音,加权噪声
- 小波(小波包)变换 频率/频域 与 图像细节处理
热门文章
- 三、运算符、表达式和语句
- 高等数学-第一章 函数 极限 连续
- 最长单调递增子序列及思维题——动态规划
- Android 表单之 EditText(输入框)详解
- GitHub 使用入门,创建仓库、添加分支...
- 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_10-CMS服务端工程搭建-导入基础工程...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_11 set方法注入
- WebSocket websockets
- 今天解决了首页无头像被显示的问题
- Firefox控制台日志转入文件