Node.js ElastiSearch客户端。如何将filter_path参数与_msearch方法一起使用

时间:2018-04-19 16:08:07

标签: node.js elasticsearch

我在我的应用程序中使用https://github.com/elastic/elasticsearch-js ElasticSearch客户端。 我想使用Multi Search API并使用 filter_path 参数减少响应。 在Kibana请求看起来像:

POST _msearch?filter_path=responses.hits.total
{ "index": "first_index" }
{"query": {"term": {"status": 1}} }
{ "index": "second_index" }
{"query": {"term": {"status": 1}} }

响应:

{
  "responses": [
    {
      "hits": {
        "total": 1935
      }
    },
    {
      "hits": {
        "total": 1212
      }
    }
  ]
}

但我找不到 client.msearch 方法中 filter_path 参数的正确位置。类似的东西:

client.msearch({
    body: [
        { "index": "first_index" },
        { "q": 'filter_path=responses.hits.total' },
        {"query": {"term": {"status": 1}} },
        { "index": "second_index" },
        { "q": 'filter_path=responses.hits.total' },
        {"query": {"term": {"status": 1}} }
    ]
})

不起作用。 如何使用Node.js ElasticSearch Client发送此请求?

1 个答案:

答案 0 :(得分:0)

filterPath关键字应与body在同一级别。

client.msearch({
    body: [
        { "index": "first_index" },
        {"query": {"term": {"status": 1}} },
        { "index": "second_index" },
        { "q": 'filter_path=responses.hits.total' },
        {"query": {"term": {"status": 1}} }
    ],
    filterPath: "responses.hits.total"
})

msearch函数的参数类型为MSearchParams。

msearch<T>(params: MSearchParams): Promise<MSearchResponse<T>>;

我建议您安装elasticsearch type definition,以便可以看到类型层次结构

export interface MSearchParams extends GenericParams {
    search_type?: "query_then_fetch" | "query_and_fetch" | "dfs_query_then_fetch" | "dfs_query_and_fetch";
    maxConcurrentSearches?: number;
    index?: NameList;
    type?: NameList;
}

export interface GenericParams {
    requestTimeout?: number;
    maxRetries?: number;
    method?: string;
    body?: any;
    ignore?: number | number[];
    filterPath?: string | string[];
}