我最近阅读了有关Elasticsearch的内容,我正在使用Jest与Amazon Elasticsearch Service进行交互。我已经能够将Jest的文档和索引填充到ES中。
然而,当我尝试查询(使用布尔查询)时,我看到极高的延迟。我尝试使用POSTMAN执行POST请求,我发现延迟要低得多。
以下是示例:
Jest Query:给定一个键,值:返回一个对象列表。
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);
输出: SearchBuilder:12 ClientExecute:1193
另一方面使用POSTMAN: 我有正文的POST请求:
{
"query" : {"bool": { "must": [{"match": {key : value}}]}}
}
执行于:es.ap-southeast-1.es.amazonaws.com/index/_search 输出:
“take”:1, “timed_out”:false, “_shards”:{ “总数”:10, “成功”:10, “失败”:0 },
我也尝试过使用Searchsourcebuilder。但无济于事。我使用正确的API吗?
谢谢! 特加斯
答案 0 :(得分:1)
这一行
"took": 1, "timed_out": false, "_shards": { "total": 10, "successful": 10, "failed": 0 }
告诉您实际的ES引擎运行查询需要多长时间,但它不包括发送查询或通过Internet将结果返回给您的任何延迟。在您的JestClient示例中,您实际上包括此时间,因此完全有可能当您的JestClient示例以相同的速度执行时,时间差异仅仅是发送和接收数据所花费的时间。
我对Jest不熟悉,但我在C#中使用了Nest(我认为它几乎完全相同),并且在结果中,您应该能够获得相同的“take”,“timed_out”统计数据。返回对象。