为什么Azure Search需要14亿秒才能返回简单查询的查询结果



我在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搜索

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

如果您试图简单地返回基于订单号的文档,而不是进行全文搜索,我建议使用"查找"API来完成

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

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

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

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

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

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

希望这能帮助

最新更新