使用 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=] 统计数据。
我最近阅读了有关 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=] 统计数据。