阅读 140

elasticsearch多路查询

易企秀这边在搜索推荐业务中经常会用到多路数据召回,比如一页60个商品位置,要求按照免付费以固定的比例进行展示,这个时候就需要分开查询,如果进行串行查询那么接口查询的响应时间就会翻倍,更好的做法是使用ES的多路查询方式进行操作

_msearch

_msearch对应的是一个query数组,每个一个query都可以设置单独的from、size以及查询排序逻辑

  • 一个简单的例子
GET my-index-000001/_msearch
{ }
{"query" : {"match" : { "message": "this is a test"}}}
{"index": "my-index-000002"}
{"query" : {"match_all" : {}}}

查询与查询直接可以使用换行符,内部不行

可以发现返回的外层多了一个responses数组, 接口执行时间以最大响应query时间为准


image.png
  • 支持配置查询模板
    创建查询模板
POST /_scripts/my_template_1
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "message": "{{query_string}}"
        }
      }
    }
  }
}

使用模板进行_msearch查询

GET _msearch/template
{"index" : "main"}
{ "id": "my_template_1", "params": { "query_string": "some message" } }

需要注意的是如果使用的是http接口,那么Content-Type需要设置为:application/x-ndjson

作者:码到成功_易企秀

原文链接:https://www.jianshu.com/p/35f152c9b5fd

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐