TransientError: Временная ошибка службы поиска - Python Google App Engine Search - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь выполнить запрос и сортировку по полю 'updated_at', используя большое number_found_accuracy:

order_options = search.SortOptions(
    expressions=[search.SortExpression(expression='updated_at',
                                   direction=search.SortExpression.DESCENDING)])

query_options = search.QueryOptions(
    limit=50,
    cursor=search.Cursor(),
    sort_options=order_options,
    number_found_accuracy=25000)

index = search.Index('contacts', namespace='default')
query_future = index.search_async(search.Query("", options=query_options))
contacts = query_future.get_result()

Когда вызывается get_result (), я получаю ошибку ниже:

Файл "/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", строка 1535, в call rv =self.handle_exception (запрос, ответ, e) файл "/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", строка 1529, в * 100* call rv = self.router.dispatch (запрос, ответ) Файл "/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", линии 1278, в default_dispatcher возврата route.handler_adapter (запрос, ответ) File "/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", строка1102, в call return handler.dispatch () Файл "/base/data/home/apps/p~imobzi-app/20181127t101400.414282042583891084/modules/base_handler.py", строка 72, в диспетчерской супер (BaseHandler, self) .dispatch () Файл "/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", строка 572, возвращение self.handle, self.app.debug) Файл "/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", строка 570, в методе отправки возврата (*args, ** kwargs) Файл "/base/data/home/apps/p~imobzi-app/20181127t101400.414282042583891084/main.py", строка 132, в файле get contacts = query_future.get_result () "/ base / alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/1/google/appengine/api/search/search.py ​​", строка 281, в get_result, вызывать _ToSearchError (e) ошибку поиска переходного процесса * (101) TransientError:1014 *

Ошибкапроисходит, когда я использую «number_found_accuracy» и «sort_options» в одном запросе, когда результат запроса велик (этот запрос возвращает более 50 000 результатов).

Если «number_found_accuracy» или «sort_options» удалено из query_options, я получаюрезультат обычно, но если оба значения находятся в query_options, возникает ошибка.

В обычном случае я бы удалил «number_found_accuracy» из запроса, но мне нужно показать счетчик результатов для пользователя и отсортировать его по updated_atполе.Кто-нибудь знает способ решить эту проблему?Это происходит только при развертывании проекта на сервере, в локальной среде / среде разработки, все работает как положено.

1 Ответ

0 голосов
/ 27 ноября 2018

Одной из причин этой ошибки может быть то, что длина запроса превышает ограничение в 2000 символов, как указано в документации .

Существует также ограничение сортировки, которое можно обойти путем предварительной сортировки документов в индексе с использованием ранга документа, как описано в в этом ответе StackOverflow .

Также обратите внимание, что согласно документации

number_found: Возвращает приблизительное количество документов, соответствующих запросу.QueryOptions, определяющий пост-обработку результатов поиска.Если для параметра QueryOptions.number_found_accuracy задано значение 100, то number_found <= 100 является точным. </p>

Поскольку вы установили number_found_accuracy=25000, любой результат поиска с размером более 25000 будет приблизительным.

...