我在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毫秒。如果有人可以帮助我减少这段时间,那真的会很有帮助
答案 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万个文档将分布在多台计算机上,从而允许每台计算机执行搜索并行处理更少量的文档,而不是依靠一台计算机来处理全部负载。但是,在您的情况下,查询看起来相对简单,因此我的建议是如上所述,并首先收集准确的指标,以了解瓶颈是在处理请求期间还是与网络相关。
希望这会有所帮助