ES批量查询

打印 上一主题 下一主题

主题 1000|帖子 1000|积分 3000

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在 Elasticsearch 中,multi_search(也称为 msearch)是一种允许你在单个哀求中实行多个搜刮操纵的 API。它可以明显淘汰网络开销,尤其是在必要实行多个查询时。multi_search 会将多个查询打包成一个哀求发送给 Elasticsearch,然后返回多个查询的结果。

1. multi_search 的根本用法

multi_search 的哀求格式如下:

  • 哀求头:指定索引名称(可选)和搜刮参数。
  • 哀求体:每个查询由两部分组成:

    • 一个可选的 header 部分,用于指定索引、类型和搜刮参数。
    • 一个 body 部分,用于指定查询 DSL。

示例

以下是一个 multi_search 的示例,包含两个查询:
json
复制
  1. POST /_msearch
  2. {}
  3. {"index": "index1"}
  4. {"query": {"match_all": {}}, "size": 10}
  5. {}
  6. {"index": "index2"}
  7. {"query": {"match": {"field": "value"}}, "size": 5}
复制代码


  • 第一个查询:在 index1 中实行 match_all 查询,返回最多10条文档。
  • 第二个查询:在 index2 中实行 match 查询,返回最多5条文档。

2. multi_search 的响应

multi_search 的响应是一个数组,数组中的每个元素对应一个查询的结果。例如:
json
复制
  1. {
  2.   "responses": [
  3.     {
  4.       "took": 10,
  5.       "timed_out": false,
  6.       "_shards": {
  7.         "total": 5,
  8.         "successful": 5,
  9.         "skipped": 0,
  10.         "failed": 0
  11.       },
  12.       "hits": {
  13.         "total": {
  14.           "value": 100,
  15.           "relation": "eq"
  16.         },
  17.         "max_score": 1.0,
  18.         "hits": [
  19.           {
  20.             "_index": "index1",
  21.             "_type": "_doc",
  22.             "_id": "1",
  23.             "_score": 1.0,
  24.             "_source": {
  25.               "field": "value1"
  26.             }
  27.           },
  28.           ...
  29.         ]
  30.       }
  31.     },
  32.     {
  33.       "took": 5,
  34.       "timed_out": false,
  35.       "_shards": {
  36.         "total": 5,
  37.         "successful": 5,
  38.         "skipped": 0,
  39.         "failed": 0
  40.       },
  41.       "hits": {
  42.         "total": {
  43.           "value": 50,
  44.           "relation": "eq"
  45.         },
  46.         "max_score": 1.5,
  47.         "hits": [
  48.           {
  49.             "_index": "index2",
  50.             "_type": "_doc",
  51.             "_id": "2",
  52.             "_score": 1.5,
  53.             "_source": {
  54.               "field": "value2"
  55.             }
  56.           },
  57.           ...
  58.         ]
  59.       }
  60.     }
  61.   ]
  62. }
复制代码


  • responses:是一个数组,每个元素对应一个查询的结果。
  • 每个查询的结果与普通的 _search 哀求返回的结果格式雷同。

3. multi_search 的上风


  • 淘汰网络开销

    • 将多个查询打包成一个哀求,淘汰了客户端与 Elasticsearch 之间的网络往返次数。
    • 适合必要同时实行多个查询的场景。

  • 进步性能

    • Elasticsearch 会并行处理 multi_search 中的查询,从而进步查询服从。

  • 机动性

    • 可以在一个哀求中查询多个索引,甚至可以为每个查询指定不同的索引和参数。


4. multi_search 的使用场景


  • 批量查询

    • 当必要同时实行多个查询时,可以使用 multi_search 来淘汰网络开销。
    • 例如,在前端页面中同时加载多个模块的数据。

  • 多索引查询

    • 当必要从多个索引中查询数据时,可以使用 multi_search 来简化查询逻辑。

  • 性能优化

    • 当必要优化查询性能时,可以将多个查询归并为一个 multi_search 哀求。


5. 示例代码

以下是一个完备的 multi_search 示例,包含两个查询:
哀求

json
复制
  1. POST /_msearch
  2. {}
  3. {"index": "index1"}
  4. {"query": {"match_all": {}}, "size": 10}
  5. {}
  6. {"index": "index2"}
  7. {"query": {"match": {"field": "value"}}, "size": 5}
复制代码
响应

json
复制
  1. {
  2.   "responses": [
  3.     {
  4.       "took": 10,
  5.       "timed_out": false,
  6.       "_shards": {
  7.         "total": 5,
  8.         "successful": 5,
  9.         "skipped": 0,
  10.         "failed": 0
  11.       },
  12.       "hits": {
  13.         "total": {
  14.           "value": 100,
  15.           "relation": "eq"
  16.         },
  17.         "max_score": 1.0,
  18.         "hits": [
  19.           {
  20.             "_index": "index1",
  21.             "_type": "_doc",
  22.             "_id": "1",
  23.             "_score": 1.0,
  24.             "_source": {
  25.               "field": "value1"
  26.             }
  27.           },
  28.           ...
  29.         ]
  30.       }
  31.     },
  32.     {
  33.       "took": 5,
  34.       "timed_out": false,
  35.       "_shards": {
  36.         "total": 5,
  37.         "successful": 5,
  38.         "skipped": 0,
  39.         "failed": 0
  40.       },
  41.       "hits": {
  42.         "total": {
  43.           "value": 50,
  44.           "relation": "eq"
  45.         },
  46.         "max_score": 1.5,
  47.         "hits": [
  48.           {
  49.             "_index": "index2",
  50.             "_type": "_doc",
  51.             "_id": "2",
  52.             "_score": 1.5,
  53.             "_source": {
  54.               "field": "value2"
  55.             }
  56.           },
  57.           ...
  58.         ]
  59.       }
  60.     }
  61.   ]
  62. }
复制代码

6. 总结



  • multi_search 是一种高效的批量查询机制,适合同时实行多个查询。
  • 上风:淘汰网络开销、进步性能、支持多索引查询。
  • 使用场景:批量查询、多索引查询、性能优化。
通过合理使用 multi_search,可以明显进步查询服从,尤其是在必要实行多个查询的场景中。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表