Преодоление ограничения на размер записи в поиске appengine - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь использовать модель поиска для записей в блоге, и она отлично работает на платформе разработки, но когда я пытаюсь добавить запись в облаке, я получаю сообщение об ошибке:

Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/init.py", line 517, in call
    handler.post(*groups) File
"/base/data/home/apps/smart-fast/1.348228399174418277/admin.py", line 76, in post
    article.put()
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/init.py", line 895, in put
    return datastore.Put(self._entity, config=config)
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/datastore.py", line 404, in Put
    return _GetConnection().async_put(config, entities, extra_hook).get_result()
File "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 601, in get_result
    self.check_success()
File "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 572, in check_success
    rpc.check_success()
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 502, in check_success
    self.__rpc.CheckSuccess()
File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 126, in CheckSuccess 
    raise self.exception
ApplicationError:

ApplicationError: 1 Too many indexed > properties for entity: app:
"smart-fast",path < Element { type: "Article", id: 2002 }> This index put
it over the limit: entity_type: "Article",ancestor: false,
Property { name: "searchable_text_index", direction: ASCENDING},
Property { name: "searchable_text_index", direction: ASCENDING},
Property { name: "date", direction: ASCENDING}

Эти записи не настолько велики (<500 слов), является ли предел таким низким? Единственный способ обойти это - сохранить запись как модель без возможности поиска, а также разбить текст записи на более мелкие модели с возможностью поиска, каждая из которых ссылается на основную запись. Любая помощь с благодарностью </p>

1 Ответ

0 голосов
/ 09 февраля 2011

То, с чем вы сталкиваетесь, называется взрывающимися индексами.Вы можете прочитать больше о них здесь: http://code.google.com/appengine/docs/python/datastore/queries.html#Big_Entities_and_Exploding_Indexes

В принципе, вы не можете использовать AppEngine для создания полнотекстового движка, если у вас нет очень маленького набора данных.Либо вы натолкнетесь на взрывающиеся индексы, либо столкнетесь с другими проблемами (например, тайм-ауты слияния)Я рекомендую вам обратиться к сервису IndexTank, который является очень хорошим сервисом полнотекстового поиска.Он имеет полноценный клиент REST API и Python, поэтому легко приступить к работе с AppEngine.

...