Node.js ElasticSearch客户端:如何在_msearch方法中使用filter_path参数
解决elasticsearch-js中Multi Search API设置filter_path的问题
我刚好碰到过类似的情况,其实在elasticsearch-js客户端里设置filter_path非常简单,关键是要把它放在API调用的查询参数配置里,而不是请求体中。
具体实现代码
这里以最新的@elastic/elasticsearch客户端为例,给你一个完整的示例:
const { Client } = require('@elastic/elasticsearch'); // 初始化客户端,替换成你的ES地址 const client = new Client({ node: 'http://localhost:9200' }); async function fetchFilteredMultiSearch() { try { const result = await client.msearch({ // 这里是Multi Search的请求体,和你在Kibana里的结构一致 body: [ { index: 'first_index' }, { query: { term: { status: 1 } } }, { index: 'second_index' }, { query: { term: { status: 1 } } } ], // 重点:在这里设置filter_path参数,放在querystring对象中 querystring: { filter_path: 'responses.hits.total' } }); // 打印精简后的响应,和你在Kibana里得到的格式一致 console.log(result.body); } catch (err) { console.error('请求出错:', err); } } fetchFilteredMultiSearch();
原理说明
在elasticsearch-js的API设计中,所有的请求方法(包括msearch)都接受一个配置对象,其中:
body字段对应请求的主体内容(也就是你在Kibana里POST的内容)querystring字段用来传递URL上的查询参数,filter_path就属于这类参数,它会被自动拼接到请求URL的末尾,和你在Kibana里手动加?filter_path=responses.hits.total的效果完全一样。
如果你用的是旧版本的elasticsearch客户端(不是@elastic前缀的),写法基本一致,同样是在调用msearch时传入包含querystring的配置对象即可。
这样调用后,你就能得到和Kibana中完全相同的精简响应啦!
内容的提问来源于stack exchange,提问作者volodymyrkoval
相关产品推荐
相关产品推荐

