马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在 Elasticsearch 中,multi_search(也称为 msearch)是一种允许你在单个哀求中实行多个搜刮操纵的 API。它可以明显淘汰网络开销,尤其是在必要实行多个查询时。multi_search 会将多个查询打包成一个哀求发送给 Elasticsearch,然后返回多个查询的结果。
1. multi_search 的根本用法
multi_search 的哀求格式如下:
- 哀求头:指定索引名称(可选)和搜刮参数。
- 哀求体:每个查询由两部分组成:
- 一个可选的 header 部分,用于指定索引、类型和搜刮参数。
- 一个 body 部分,用于指定查询 DSL。
示例
以下是一个 multi_search 的示例,包含两个查询:
json
复制
- POST /_msearch
- {}
- {"index": "index1"}
- {"query": {"match_all": {}}, "size": 10}
- {}
- {"index": "index2"}
- {"query": {"match": {"field": "value"}}, "size": 5}
复制代码
- 第一个查询:在 index1 中实行 match_all 查询,返回最多10条文档。
- 第二个查询:在 index2 中实行 match 查询,返回最多5条文档。
2. multi_search 的响应
multi_search 的响应是一个数组,数组中的每个元素对应一个查询的结果。例如:
json
复制
- {
- "responses": [
- {
- "took": 10,
- "timed_out": false,
- "_shards": {
- "total": 5,
- "successful": 5,
- "skipped": 0,
- "failed": 0
- },
- "hits": {
- "total": {
- "value": 100,
- "relation": "eq"
- },
- "max_score": 1.0,
- "hits": [
- {
- "_index": "index1",
- "_type": "_doc",
- "_id": "1",
- "_score": 1.0,
- "_source": {
- "field": "value1"
- }
- },
- ...
- ]
- }
- },
- {
- "took": 5,
- "timed_out": false,
- "_shards": {
- "total": 5,
- "successful": 5,
- "skipped": 0,
- "failed": 0
- },
- "hits": {
- "total": {
- "value": 50,
- "relation": "eq"
- },
- "max_score": 1.5,
- "hits": [
- {
- "_index": "index2",
- "_type": "_doc",
- "_id": "2",
- "_score": 1.5,
- "_source": {
- "field": "value2"
- }
- },
- ...
- ]
- }
- }
- ]
- }
复制代码
- responses:是一个数组,每个元素对应一个查询的结果。
- 每个查询的结果与普通的 _search 哀求返回的结果格式雷同。
3. multi_search 的上风
- 淘汰网络开销:
- 将多个查询打包成一个哀求,淘汰了客户端与 Elasticsearch 之间的网络往返次数。
- 适合必要同时实行多个查询的场景。
- 进步性能:
- Elasticsearch 会并行处理 multi_search 中的查询,从而进步查询服从。
- 机动性:
- 可以在一个哀求中查询多个索引,甚至可以为每个查询指定不同的索引和参数。
4. multi_search 的使用场景
- 批量查询:
- 当必要同时实行多个查询时,可以使用 multi_search 来淘汰网络开销。
- 例如,在前端页面中同时加载多个模块的数据。
- 多索引查询:
- 当必要从多个索引中查询数据时,可以使用 multi_search 来简化查询逻辑。
- 性能优化:
- 当必要优化查询性能时,可以将多个查询归并为一个 multi_search 哀求。
5. 示例代码
以下是一个完备的 multi_search 示例,包含两个查询:
哀求
json
复制
- POST /_msearch
- {}
- {"index": "index1"}
- {"query": {"match_all": {}}, "size": 10}
- {}
- {"index": "index2"}
- {"query": {"match": {"field": "value"}}, "size": 5}
复制代码 响应
json
复制
- {
- "responses": [
- {
- "took": 10,
- "timed_out": false,
- "_shards": {
- "total": 5,
- "successful": 5,
- "skipped": 0,
- "failed": 0
- },
- "hits": {
- "total": {
- "value": 100,
- "relation": "eq"
- },
- "max_score": 1.0,
- "hits": [
- {
- "_index": "index1",
- "_type": "_doc",
- "_id": "1",
- "_score": 1.0,
- "_source": {
- "field": "value1"
- }
- },
- ...
- ]
- }
- },
- {
- "took": 5,
- "timed_out": false,
- "_shards": {
- "total": 5,
- "successful": 5,
- "skipped": 0,
- "failed": 0
- },
- "hits": {
- "total": {
- "value": 50,
- "relation": "eq"
- },
- "max_score": 1.5,
- "hits": [
- {
- "_index": "index2",
- "_type": "_doc",
- "_id": "2",
- "_score": 1.5,
- "_source": {
- "field": "value2"
- }
- },
- ...
- ]
- }
- }
- ]
- }
复制代码 6. 总结
- multi_search 是一种高效的批量查询机制,适合同时实行多个查询。
- 上风:淘汰网络开销、进步性能、支持多索引查询。
- 使用场景:批量查询、多索引查询、性能优化。
通过合理使用 multi_search,可以明显进步查询服从,尤其是在必要实行多个查询的场景中。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |