之前说过了针对单一文档的增删改查,基本也算是达到了一个基本数据库的功能。本篇主要描述的是多文档的查询,通过这个查询语法,可以根据多个文档的查询条件,返回多个文档集合。
更多内容可以参考我整理的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多文档查询相关推荐

  1. 仿抖音短视频用户业务模块----完成用户信息增删改查并通过接口文档联调(模拟工作环境)

    仿抖音项目持续更新中: 仿抖音短视频APP专栏 练习: 目录 1.根据nickname或者mobile来查询用户信息 2.根据用户id删除用户信息 3.根据用户id修改用户信息 1.根据nicknam ...

  2. elasticsearch 增删改查(CRUD)

    elasticsearch 增删改查(CRUD) 本文阅读前提: 1.已经安装了elasticsearch.可以参考:http://blog.csdn.net/wild46cat/article/de ...

  3. oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...

    SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...

  4. Elasticsearch增删改查 之 —— Delete删除

    删除文档也算是常用的操作了...如果把Elasticsearch当做一款普通的数据库,那么删除操作自然就很常用了.如果仅仅是全文检索,可能就不会太常用到删除. Delete API 删除API,可以根 ...

  5. elasticsearch增删改查实现

    1.操作索引 1.1.基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的. 对比关系: 索引(indices)------------- ...

  6. Spring Data ElasticSearch增删改查

    Spring Data ElasticSearch 一.介绍 ElasticSearch 学习路线图 1.学习ElasticSearch安装及其API操作 2. 学习原生ElastricSearch ...

  7. ElasticSearch增删改查之python sort、scroll、scan

    1.用python操作elasticsearch有两个库可以调用 # ElasticSearch不支持scroll(分页查询)查询 from pyelasticsearch import Elasti ...

  8. Elasticsearch增删改查

    2019独角兽企业重金招聘Python工程师标准>>> elasticsearch_rtf_1.3-master链接:http://pan.baidu.com/s/1qYH7w8O  ...

  9. MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union

    接进阶篇①,我们继续学习. 一.联合查询 1.1 内连接 1.2 外连接 1.3 内连接和左右外连接的区别 二.自连接 三.子查询 3.1 单行子查询 3.2 多行子查询 使用 in 范围匹配多行 另 ...

  10. MySQL - 表的增删改查(约束+聚合、联合查询)

    本节目标: 数据库约束 表的关系 新增: 删除 修改 查询 1.数据库约束 1.1约束类型 NOT NULL -指示某列不能存储 NULL值. UNIQUE -保证某列的每行必须有唯一的值. DEFA ...

最新文章

  1. ECMAScript 6 学习笔记(一)
  2. php赋值给jq,jquery怎么给div赋值
  3. when is backend date format set in Javascript DateFormat
  4. Linux 格式化磁盘命令mkfs
  5. 缓慢的http拒绝服务攻击 tomcat_攻击技术
  6. power bi可视化表_滚动器可视化功能,用于Power BI Desktop中的股价变动
  7. 结合CDIB类,对图像的打开、显示、保存
  8. Objective-C 常用代码
  9. wmp12功能打不开_使用Windows Media Player Plus向WMP添加新功能
  10. SAP固定资产模块的表
  11. 关于工作中的相关问题的看法和建议 (一)JAVA小组的调整问题
  12. Java数据类型:基本数据类型和引用数据类型
  13. 如何利用Python在网上接单,兼职也能月薪过万
  14. access通过身份证号提取性别_Access计算根据身份证号码字段计算年龄和性别的表达式,最好是还能确定户籍地址,该在什么地方输入?...
  15. [扩展阅读] EasyGUI 学习文档【超详细中文版】
  16. 【STM32CubeMX安装】
  17. JavaScript-狂神说笔记
  18. 可视化实验十一:利用Python绘制气泡图、雷达图
  19. 超级计算机 噪音,加权噪声
  20. 小波(小波包)变换 频率/频域 与 图像细节处理

热门文章

  1. 三、运算符、表达式和语句
  2. 高等数学-第一章 函数 极限 连续
  3. 最长单调递增子序列及思维题——动态规划
  4. Android 表单之 EditText(输入框)详解
  5. GitHub 使用入门,创建仓库、添加分支...
  6. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_10-CMS服务端工程搭建-导入基础工程...
  7. 阶段3 2.Spring_03.Spring的 IOC 和 DI_11 set方法注入
  8. WebSocket websockets
  9. 今天解决了首页无头像被显示的问题
  10. Firefox控制台日志转入文件