ES中搜索的方式分为两种,一种是通过URL参数进行搜索;另一种是通过POSTbody请求参数进行搜索。

针对第一种我们进行简单的讲解,我们关注的核心放在第二种上面。

一、简单搜索(search)

1.1 测试使用的index、mapping及数据准备

PUT example
PUT example/docs/_mapping
{"properties": {"id": {"type": "long"},"orderNo": {"type": "keyword"},"buyerId": {"type": "long"},"shopId": {"type": "long"},"shopName": {"type": "text","analyzer":"ik_max_word","search_analyzer":"ik_smart","fields": {"keyword": {"type": "keyword"}}},"tradeStatus": {"type": "integer"},"payStatus": {"type": "integer"},"orderAmount": {"type": "float"},"payAmount": {"type": "float"},"payPlatformOrderNo": {"type": "keyword"},"delivery": {"properties": {"receiver": {"type": "keyword"},"phoneNumber": {"type": "keyword"},"address": {"type": "keyword"},"detailedAddress": {"type": "keyword"}}},"items": {"type": "nested","properties": {"id": {"type": "long"},"orderId": {"type": "long"},"goodId": {"type": "long"},"goodName": {"type": "keyword"},"goodPrice": {"type": "float"},"goodNumber": {"type": "integer"},"goodAmount": {"type": "float"},"createTime": {"type": "date","format": "yyyy-MM-dd HH:mm:ss","ignore_malformed": true}}},"createTime": {"type": "date","format": "yyyy-MM-dd HH:mm:ss","ignore_malformed": true},"deliveryTime": {"type": "date","format": "yyyy-MM-dd HH:mm:ss","ignore_malformed": false},"deliveryAmount": {"type": "float"},"remark": {"type": "text","analyzer":"ik_max_word","search_analyzer":"ik_smart"}}
}#bulk插入
POST example/docs/_bulk
{"index": {"_id": 1}}
{"id":1,"orderNo":1136482742505680898,"buyerId":4500,"shopId":9596,"shopName":"小米手机官方旗舰店","tradeStatus":1,"payStatus":1,"orderAmount":4290.90,"payAmount":4280.00,"payPlatformOrderNo":"9b235e16-ffa2-4605-af8c-47bee94d1732","delivery":{"receiver":"张三","phoneNumber":"13279220508","address":"陕西省西安市雁塔区","detailedAddress":"小寨东路91号陕西历史博物馆"},"items":[{"id":123,"orderId":1,"goodId":54,"goodName":"小米CC9Pro","goodPrice":3299.00,"goodNumber":5468,"goodAmount":1,"createTime":"2019-11-11 00:01:18"},{"id":124,"orderId":1,"goodId":55,"goodName":"小米插线板","goodPrice":49.00,"goodNumber":5469,"goodAmount":2,"createTime":"2019-11-11 00:01:18"},{"id":125,"orderId":1,"goodId":56,"goodName":"小米平衡车","goodPrice":1999.00,"goodNumber":5470,"goodAmount":1,"createTime":"2019-11-11 00:01:18"}],"createTime":"2019-11-11 00:01:18","deliveryTime":"2019-11-11 16:30:22","deliveryAmount":20.00,"remark":"尽快发货,谢谢!"}
{"index": {"_id": 2}}
{"id":2,"orderNo":1136482742505656781,"buyerId":4500,"shopId":9500,"shopName":"华为旗舰店","tradeStatus":1,"payStatus":1,"orderAmount":7999.99,"payAmount":6500.00,"payPlatformOrderNo":"9b235e16-ffa2-4605-af8c-47bee94d2134","delivery":{"receiver":"张三","phoneNumber":"13279220508","address":"陕西省西安市雁塔区","detailedAddress":"小寨东路91号陕西历史博物馆"},"items":[{"id":124,"orderId":2,"goodId":1003,"goodName":"华为笔记本","goodPrice":7999.99,"goodNumber":5400,"goodAmount":1,"createTime":"2019-11-11 00:01:18"}],"createTime":"2019-11-11 00:01:18","deliveryTime":"2019-11-12 18:30:22","deliveryAmount":0.00,"remark":"尽快发货,谢谢!"}
{"index": {"_id": 3}}
{"id":3,"orderNo":1136482742505655433,"buyerId":4501,"shopId":8503,"shopName":"无印良品旗舰店","tradeStatus":1,"payStatus":1,"orderAmount":2036.00,"payAmount":2020.00,"payPlatformOrderNo":"9b235e16-ffa2-4605-af8c-47bee94d2300","delivery":{"receiver":"李四","phoneNumber":"13279228888","address":"陕西省西安市长安区","detailedAddress":"西长安街1号大厦"},"items":[{"id":620,"orderId":3,"goodId":8784,"goodName":"柔和洗面奶","goodPrice":79.90,"goodNumber":8780,"goodAmount":1,"createTime":"2019-11-11 00:21:50"},{"id":622,"orderId":3,"goodId":8704,"goodName":"化妆水","goodPrice":109.90,"goodNumber":8580,"goodAmount":2,"createTime":"2019-11-11 00:21:50"}],"createTime":"2019-11-11 00:21:50","deliveryTime":"2019-11-13 17:35:23","deliveryAmount":8.00,"remark":"尽快发货,谢谢!"}

1.2 示例

在这里我们只做简单的示例,不做过多的学习,有过Http基础的话,基本没有什么难度。

#查询所有
GET example/docs/_search#带有参数的查询
GET example/docs/_search?#在索引example和us的所有类型中搜索
GET example,us/_search# 在以g或u开头的索引的所有类型中搜索
GET e*,u*/_search#在索引example和us的类型为docs和docs2中搜索
GET example,us/docs,docs2/_search

注意:当你搜索包含单一索引时,Elasticsearch转发搜索请求到这个索引的主分片或每个分片的复制分片上,然后聚集每个分片的结果。搜索包含多个索引也是同样的方式——只不过或有更多的分片被关联。

可以跟的参数如下图所示。其实这些方式归根到底第二种方式的功能是重合的。

二、 结构化搜索(request body search)

请求体的参数是JSON格式。这种JSON必须遵循DSL(domain search language)语法格式。在这里我们简单做一下示例使用。关于更多的查询和使用会在后续的文章逐一详细介绍。

2.1 查询所有

GET example/docs/_search
{"query": {"match_all": {}}
}

2.2 分页搜索

SQL使用LIMIT关键字返回只有一页的结果一样,Elasticsearch接受fromsize参数:

size: 结果数,默认10

from: 跳过开始的结果数,默认0。可理解成元素开始的索引下标

例如我们想分页搜索订单的第一页,每页显示2个。

GET example/docs/_search
{"query": {"match_all": {}},"from": 0,"size": 2
}

应该当心分页太深或者一次请求太多的结果。结果在返回前会被排序。但是记住一个搜索请求常常涉及多个分片。每个分片生成自己排好序的结果,它们接着需要集中起来排序以确保整体排序正确。

小贴士

在集群系统中深度分页。为了理解为什么深度分页是有问题的,让我们假设在一个有5个主分片的索引中搜索。当我们请求结果的第一页(结果1到10)时,每个分片产生自己最顶端10个结果然后返回它们给请求节点(requesting node),它再排序这所有的50个结果以选出顶端的10个结果。

现在假设我们请求第1000页——结果10001到10010。工作方式都相同,不同的是每个分片都必须产生顶端的10010个结果。然后请求节点排序这50050个结果并丢弃50040个!你可以看到在分布式系统中,排序结果的花费随着分页的深入而成倍增长。这也是为什么网络搜索引擎中任何语句不能返回多于10000个结果的原因(通常最大的分页数就是100页,比如说京东的评论数等等)。

Elasticsearch(038):es中搜索之入门与分页搜索相关推荐

  1. 【elasticsearch】ES 单分片使用 From/Size 分页遇到重复数据

    1.概述 ES 单分片使用 From/Size 分页遇到重复数据 常规情况下 ES 单分片使用 From/Size 是不会遇到数据重复的,数据重复的可能原因有: 没有添加排序: 添加了按得分排序,但是 ...

  2. ElasticSearch面试 - es 在数据量很大的情况下如何提高查询效率啊?

    面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的.很多时 ...

  3. ES中实现分页查询数据并返回想要的字段

    在日志收集系统中,最近需要通过httpclient获取es中的日志信息,所以学习了一些es的查询语句方面的用法: 分页 分页的本质 分页的本质是从"大的数据集"中取出一部分.比如1 ...

  4. 怎么配置linux中es搜索的主机名,分布式搜索elasticsearch中文分词集成

    elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介 ...

  5. ES(Elasticsearch)全文搜索引擎(最全)入门基本语法与在SpringBoot中的实战

    注:本文较长,根据个人情况有些内容可以跳过,前面是基本的概述,中间是一些基于es的一个可视化工具进行操作,代码实现在最下边: 一.认识Elasticsearch 1.1.为什么要使用Elasticse ...

  6. 搜索引擎之ElasticSearch(es)入门学习、ELK 和 beats

    好记星不如烂笔头,这里记录平时工作中用到的东西,不喜可以留言. 一.ElasticSearch为啥要用 ElasticSearch简称es是一个ElasticSearch是一个分布式,高性能.高可用. ...

  7. es中修改某个字段值_搜索引擎之laravel中使用elasticsearch(一)

    一.概述 Elasticsearch官方提供了Composer包可直接引用就好,不过要注意:如果你使用的elastcsearch不是最新的那么我建议你指定合适的版本下载,而不要采用最新的,因为不同版本 ...

  8. Elasticsearch和Hive整合,将hive数据同步到ES中

    1 Elasticsearch整合Hive 1.1 软件环境 Hadoop软件环境 Hive软件环境 ES软件环境 1.2 ES-Hadoop介绍 1.2.1 官网 https://www.elast ...

  9. Elasticsearch(ES)入门,这一篇就够了

    实时搜索引擎Elasticsearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进 ...

最新文章

  1. Eclipse中新建SpringBoot项目并输出HelloWorld
  2. c语言5个学生3门成绩写入文件,(5) 输入N个学生的姓名和3门课的成绩,统计每个学生的平均成绩后,将结果输出到文件studen...
  3. windows下utf-8和unicode的相互转换
  4. php pdo参数化,php – 如何正确地使用PDO对象的参数化SELECT查询
  5. 使用inspector功能查看和管理契约
  6. Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
  7. 小学生也能看懂的ArrayList底层原理
  8. [AX]AX2012 C#使用IIS宿主AIF服务的一些问题
  9. i310100和i59400f哪个好 i3 10100和i5 9400f差距大吗
  10. Abaqus帮助文档翻译——启动和退出Abaqus/CAE
  11. html圈小猫小游戏
  12. 目前服务器cpu主流参数,服务器CPU天梯图-包含所有主流设备及服务器处理器
  13. 夏普科学计算机标准差,夏普比率-标准差-贝他系数
  14. 如何用原生js获取非行间样式
  15. windows 10 笔记本无法连接无线网,显示已关闭
  16. 翡翠玉石微观世界,太美了!
  17. 北航计算机学院博士开题,关于硕士生、博士生开题报告的通知及规定-北航电子信息工程学院...
  18. 中小型运维团队如何设计运维自动化平台
  19. Git安装包下载地址
  20. QT5开发之 信号与槽机制

热门文章

  1. mysql网速10m_10M网速每秒等于多少MB
  2. Python3 IO编程之StringIO和BytesIO
  3. 块级元素高度不固定实现垂直居中效果
  4. tigase遇到问题集锦
  5. 【JavaWeb】之Servlet监听器
  6. WPS500X汽车压力传感器
  7. wk一sm5时间温度控制器_广安前锋WK-1JK(TH)温湿度控制器品牌
  8. 2024四川大学计算机考研信息汇总
  9. 美团技术--多渠道打包脚本
  10. java计算机毕业设计后勤管理系统MyBatis+系统+LW文档+源码+调试部署