Почему поиск Azure занимает 1400 мсек, чтобы вернуть результаты запроса для простого запроса
У меня есть индекс в лазурном поиске, который имеет следующий 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"
Я проиндексировал почти 0,8 миллиона документов и написал следующий код 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 миллисекунд. Если кто-то может помочь мне сократить это время, было бы очень полезно
1 ответ
Если вы пытаетесь просто вернуть документ на основе orderNo вместо полнотекстового поиска, я бы порекомендовал использовать API "Lookup" для этого.
https://docs.microsoft.com/en-us/rest/api/searchservice/lookup-document
Кроме того, использование таймера на стороне клиента для расчета истекшего времени не даст вам точных результатов. На прошедшее время будут влиять многие факторы, включая конфигурацию вашего клиентского компьютера и производительность вашей сети. Если вас интересует, сколько времени потребовалось серверу для обработки вашего запроса, я бы предложил поэкспериментировать с API REST, а затем проверить значение "истекшее время" в заголовке ответа вашего поискового запроса. Это будет более полезно для отслеживания эффективности поиска, так как оно пропустит любое время, проведенное в сети. Если вы сделаете это, я бы предложил выполнить несколько запросов, а затем взять среднее затраченное время в качестве метрики.
Если вы видите, что истекшее время быстро, но поисковый запрос все еще относительно медленный из-за проблем с производительностью сети, то убедитесь, что вы повторно используете объект "Клиент поиска" между вызовами, а не создаете новый для каждого вызова, поскольку это обычная причина, запросы не получают оптимальную задержку.
Наконец, вот полная статья о настройке производительности для службы поиска Azure.
https://docs.microsoft.com/en-us/azure/search/search-performance-optimization
В вашем случае кажется, что вы пытаетесь ускорить выполнение одного запроса, а не увеличивать количество запросов, которые могут быть обработаны одновременно. Если ваш запрос был особенно сложным (например, попытка вернуть много документов при использовании сортировки и огранки), увеличение количества разделов может помочь, так как ваш 0,8 миллиона документов будет распределен по нескольким машинам, что позволит каждому из них выполнить поиск параллельно меньшее количество документов, а не полагаться на один компьютер для полной загрузки. Однако в вашем случае запрос выглядит относительно простым, поэтому мое предложение будет таким, как я упоминал выше, и сначала соберет точную метрику, чтобы понять, является ли узкое место во время обработки запроса или связана ли его сеть.
Надеюсь это поможет