• 【ES】学习2-搜索


    1.空搜索

    返回所有索引下的所有文档

    GET /_search

    设置超时。timeout 不是停止执行查询,它仅仅是告知正在协调的节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询即使是结果已经被发送了。

    GET /_search?timeout=10ms

    2.多索引,多类型

    /_search   在所有的索引中搜索所有的类型

    /gb/_search   在 gb 索引中搜索所有的类型

    /gb,us/_search   在 gb 和 us 索引中搜索所有的文档

    /g*,u*/_search   在任何以 g 或者 u 开头的索引中搜索所有的类型

    /gb/user/_search   在 gb 索引中搜索 user 类型

    /gb,us/user,tweet/_search   在 gb 和 us 索引中搜索 user 和 tweet 类型

    /_all/user,tweet/_search   在所有的索引中搜索 user 和 tweet 类型

    3.分页

    在不指定数量时只会返回前10个文档。可以用size, from参数指定显示的文档数量

    size显示应该返回的结果数量,默认是 10  from显示应该跳过的初始结果数量,默认是 0

    GET /_search?size=5
    GET /_search?size=5&from=5
    GET /_search?size=5&from=10

    深度分页问题

    理解为什么深度分页是有问题的,我们可以假设在一个有 5 个主分片的索引中搜索。 当我们请求结果的第一页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点 ,协调节点对 50 个结果排序得到全部结果的前 10 个。

    现在假设我们请求第 1000 页--结果从 10001 到 10010 。所有都以相同的方式工作除了每个分片不得不产生前10010个结果以外。 然后协调节点对全部 50050 个结果排序最后丢弃掉这些结果中的 50040 个结果。

    可以看到,在分布式系统中,对结果排序的成本随分页的深度成指数上升。这就是 web 搜索引擎对任何查询都不要返回超过 1000 个结果的原因。

    4.轻量搜索

    查询在 tweet 类型中 tweet字段包含 elasticsearch 单词的所有文档

    GET /_all/tweet/_search?q=tweet:elasticsearch

    查询在 name 字段中包含 john 并且在 tweet 字段中包含 mary 的文档。

    +name:john +tweet:mary
    GET /_search?q=%2Bname%3Ajohn+%2Btweet%3Amary

    + 前缀表示必须与查询条件匹配。类似地, - 前缀表示一定不与查询条件匹配。没有+ 或者 - 的所有其他条件都是可选的

    下面的查询针对tweents类型,并使用以下的条件:

    • name 字段中包含 mary 或者 john
    • date 值大于 2014-09-10
    • _all_ 字段包含 aggregations 或者 geo
    +name:(mary john) +date:>2014-09-10 +(aggregations geo)
    ?q=%2Bname%3A(mary+john)+%2Bdate%3A%3E2014-09-10+%2B(aggregations+geo)
  • 相关阅读:
    Appium脚本(2):元素检测
    查看appPackage和appActivity的多种方法
    让织梦内容页arclist标签的当前文章标题加亮显示
    dedecms wap 上一篇 下一篇 链接出错
    织梦开启二级域名(多站点)内容页图片无法显示的解决方法
    多级分类标签{dede:channelartlist}实现当前栏目颜色高亮显示
    织梦channelartlist标签当前栏目高亮
    dedecms模板中 if else怎么写
    dedecms调用子栏目及文章列表
    Dedecms判断当前栏目下是否有子栏目
  • 原文地址:https://www.cnblogs.com/dplearning/p/6940458.html
Copyright © 2020-2023  润新知