使用 JestClient 的 ElasticSearch 查询似乎很慢

ElasticSearch querying using JestClient seems to be very slow

我最近阅读了有关 Elasticsearch 的内容,我正在使用 Jest 与 Amazon Elasticsearch Service 进行交互。我已经能够在 ES 中利用 Jest 的文档和索引数据。

但是,当我尝试使用布尔查询进行查询时,我发现延迟非常高。我尝试使用 POSTMAN 执行 POST 请求,我发现延迟要低得多。

示例如下:

Jest 查询:给定一个键,值:Return 一个对象列表。

JestClient 客户端:

String query = "{\n" +
        "    \"query\" : \n" +
        "        {\"bool\": \n" +
        "            { \"must\": \n" +
        "                [\n" +
        "                    {\"match\": \n" +
        "                        {\"" + key +"\" : \"" + value + "\"}\n" +
        "                    }\n" +
        "                ]\n" +
        "            }\n" +
        "        }\n" +
        "}";

long startTime, endTime;

Search search = new Search.Builder(query)
        // multiple index or types can be added.
        .addIndex(indexName)
        .addType(typeName)
        .build();
endTime = System.currentTimeMillis();
System.out.println("SearchBuilder: " + (endTime - startTime));

startTime = endTime;
JestResult result = client.execute(search);
endTime = System.currentTimeMillis();

System.out.println("ClientExecute: " + (endTime - startTime));

return result.getSourceAsObjectList(<Object>.class);

输出: 搜索生成器:12 客户端执行:1193

另一方面,使用 POSTMAN: 我有正文的 POST 请求:

{
    "query" : {"bool": { "must": [{"match": {key : value}}]}}
}

执行时间:es.ap-southeast-1.es.amazonaws.com/index/_search 输出:

"拿下": 1, “timed_out”:错误, “_碎片”:{ “总计”:10, “成功”:10, “失败”:0 },

我也尝试过使用 Searchsourcebuilder。但无济于事。我用对了吗API?

这一行

"took": 1, "timed_out": false, "_shards": { "total": 10, "successful": 10, "failed": 0 }

告诉您实际 ES 引擎 运行 查询花费了多长时间,但它不包括发送查询或通过互联网 return 将结果发送给您的任何延迟.在您的 JestClient 示例中,您实际上包括了这个时间,因此完全有可能虽然您的 JestClient 示例以相同的速度执行,但时间差只是传输和接收数据所花费的时间。

我不熟悉 Jest,但我在 C# 中使用过 Nest(我认为这几乎是相同的),在结果中,你应该能够得到相同的 "took",[= return 对象中的 18=] 统计数据。