Почему поиск Azure занимает 1400 мсек, чтобы вернуть результаты запроса для простого запроса - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть индекс в поиске по 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"

Я проиндексировал почти 0,8 миллиона документов и написал следующий код 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 миллисекунд .Если кто-нибудь может помочь мне сократить это время, это было бы очень полезно

1 Ответ

0 голосов
/ 20 декабря 2018

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

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

...