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

Why is Azure Search taking 1400 miliiseconds to return query results for simple query

我在 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 代码来查询 azure search

        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 毫秒。如果有人能帮我减少这个时间,那真的很有帮助

如果您只是尝试 return 基于 orderNo 的文档,而不是进行全文搜索,我建议使用 "Lookup" API 来这样做

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

此外,使用客户端计时器计算经过的时间不会给您准确的结果。经过的时间会受到许多因素的影响,包括您的客户端机器配置和您的网络性能。如果您对服务器处理您的请求所花费的时间感兴趣,我建议您尝试使用 REST api,然后检查您的响应 header 中的 "elapsed-time" 值搜索查询。这对于监控您的搜索性能更有用,因为它会忽略在网络上花费的任何时间。如果你这样做,我会建议 运行 多个查询,然后将平均运行时间作为指标。

如果您发现经过的时间很快,但搜索查询由于网络性能问题仍然相对较慢,那么请确保 re-use 搜索客户端 object 在两次调用之间,而不是为每次调用都创建一个新调用,因为这是查询未获得最佳延迟的常见原因。

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

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

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

希望对您有所帮助