为什么Azure搜索需要1400毫秒才能返回简单查询的查询结果

时间:2018-12-18 20:59:05

标签: java azure elasticsearch lucene azure-search

我在azure搜索中有一个索引,其中包含以下json

        "id": "1847234520751",
        "orderNo": "1847234520751",
        "orderType": "ONLINE",
        "orderState": "OPROCESSING",
        "orderDate": "2018-10-02T18:28:07Z",
        "lastModified": "2018-11-01T19:13:46Z",
        "docType": "SALES_ORDER",
        "paymentType": "PREPAID",
        "buyerInfo_primaryContact_name_firstName": "",
        "buyerInfo_primaryContact_name_lastName": "",
        "buyerInfo_primaryContact_email_emailAddress": "test@gmail.com"

我已经索引了将近80万个文档,并编写了以下JAVA代码来查询天蓝色搜索

        IndexSearchOptions options = new IndexSearchOptions();
        options.setSearchFields("orderNo");
        long startTime1 = System.currentTimeMillis();
        IndexSearchResult result = indexClient.search(filter, options);
        long stopTime1 = System.currentTimeMillis();
        long elapsedTime1 = stopTime1 - startTime1;
        System.out.println("elapsed time " + elapsedTime1);

此操作的时间为 1400毫秒。如果有人可以帮助我减少这段时间,那真的会很有帮助

1 个答案:

答案 0 :(得分:3)

如果您只是尝试根据orderNo返回文档,而不是进行全文搜索,那么我建议您使用“查找” API

https://docs.microsoft.com/en-us/rest/api/searchservice/lookup-document

此外,使用客户端计时器计算经过的时间也不会给您准确的结果。经过的时间将受到许多因素的影响,包括您的客户端计算机配置和网络性能。如果您对服务器处理您的请求花了多少时间感兴趣,建议您尝试使用REST api,然后检查搜索查询的响应标头中的“经过时间”值。这将有助于监视您的搜索效果,因为它会节省网络上的所有时间。如果这样做,建议您运行多个查询,然后将平均经过时间作为指标。

如果您看到经过的时间很快,但是由于网络性能问题,搜索查询仍然相对较慢,那么请确保在两次调用之间重新使用Search Client对象,而不是为调用创建一个新的对象。每个呼叫,因为这是查询无法获得最佳延迟的常见原因。

最后,这是有关调整Azure搜索服务性能的完整文章。

https://docs.microsoft.com/en-us/azure/search/search-performance-optimization

在您的情况下,您似乎正在尝试提高单个查询的性能,而不是尝试增加一次可以处理的查询数量。如果您的查询特别复杂(例如,尝试在使用排序和分面时返回很多文档),则增加分区数可能会有所帮助,因为您的80万个文档将分布在多台计算机上,从而允许每台计算机执行搜索并行处理更少量的文档,而不是依靠一台计算机来处理全部负载。但是,在您的情况下,查询看起来相对简单,因此我的建议是如上所述,并首先收集准确的指标,以了解瓶颈是在处理请求期间还是与网络相关。

希望这会有所帮助

相关问题