Почему поиск 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 миллиона документов будет распределен по нескольким машинам, что позволит каждому из них выполнить поиск параллельно меньшее количество документов, а не полагаться на один компьютер для полной загрузки. Однако в вашем случае запрос выглядит относительно простым, поэтому мое предложение будет таким, как я упоминал выше, и сначала соберет точную метрику, чтобы понять, является ли узкое место во время обработки запроса или связана ли его сеть.

Надеюсь это поможет

Другие вопросы по тегам