使用JestClient进行ElasticSearch查询似乎非常慢

时间:2016-05-24 04:19:05

标签: elasticsearch jest amazon-elasticsearch

我最近阅读了有关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吗?

谢谢! 特加斯

1 个答案:

答案 0 :(得分:1)

这一行

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

告诉您实际的ES引擎运行查询需要多长时间,但它不包括发送查询或通过Internet将结果返回给您的任何延迟。在您的JestClient示例中,您实际上包括此时间,因此完全有可能当您的JestClient示例以相同的速度执行时,时间差异仅仅是发送和接收数据所花费的时间。

我对Jest不熟悉,但我在C#中使用了Nest(我认为它几乎完全相同),并且在结果中,您应该能够获得相同的“take”,“timed_out”统计数据。返回对象。