0

Когда документ хранится как в хранилище данных Cloud, так и в индексе поиска, возможно ли, когда запрос из индекса поиска, а не возврат индексных документов поиска, возвращает каждый соответствующий объект из облачного хранилища данных вместо? Другими словами, я по существу хочу, чтобы мой поисковый запрос возвращал то, что будет возвращать запрос хранилища данных.Интеграция API поиска GAE с Datatstore

Дополнительные сведения: Когда я создаю объект в хранилище данных, я передаю идентификатор объекта, имя и параметры описания. Поисковый документ построен таким образом, что его идентификатор документа совпадает с идентификатором соответствующего объекта. Целью является создание интерфейсной реализации поиска, которая будет использовать полнотекстовый поиск api для извлечения всех соответствующих документов на основе текстового запроса. Однако я хочу вернуть все детали этого документа, которые хранятся в объекте хранилища данных.

Будет ли единственный способ сделать это, чтобы создать ключ для каждого поиска doc_id, возвращаемого из запроса, а затем использовать get_multi(keys) для извлечения всех соответствующих объектов хранилища данных?

+0

Я полагаю, что альтернативой конвертации в чистые документы поиска является использование только запросов к хранилищу данных и воссоздание полнотекстового типа поиска путем создания нескольких индексов. Надеясь, что у кого-то есть более проницательные мысли, чем эти варианты. – yoonjesung

+0

Вам нужно быть более конкретным с вашим вопросом, неясно, на что вы хотите ответить. – danielx

ответ

1

Для этого не требуется поддержка первого класса. Лучше всего сделать идентификатор документа сопоставимым с ключом хранилища данных и маршрутизировать все запросы put/get/search через единый уровень DAO/repository, чтобы обеспечить определенный уровень согласованности.

Вы можете использовать параллельную запись в формате Async, чтобы сохранить латентность, но вы не можете сделать так, чтобы поиск не участвовал в транзакциях. Он также не имеет определенной согласованности, поэтому предположим, что это возможно и, вероятно, намного медленнее распространения индекса хранилища данных.

+0

Если бы я хотел иметь сильные согласованные данные, тогда мне пришлось бы использовать только хранилище данных для транзакций? И если да, то должен ли я создать собственную реализацию текстового поиска для запросов к хранилищу данных? – yoonjesung

+0

Если вам нужны строго согласованные запросы, вы должны использовать запросы предков в хранилище данных. Вы можете создавать и фрагментировать термины самостоятельно и хранить их в хранилище данных, это в значительной степени то, что делает служба поиска. – Nick

0

Вы можете хранить любую информацию, которая вам нужна в документах API поиска, в дополнение к их текстовому содержимому.

Это позволит вам получить все данные за один вызов за счет, возможно, хранения некоторой дублирующей информации как в документах API поиска, так и в объектах хранилища данных. Очевидно, что дублирование данных не является идеальным, но это может быть хорошим вариантом для редко изменяющихся данных (например, отметки времени документа, идентификатора автора, названия и т. Д.), Поскольку это может обеспечить значительное повышение производительности.

+0

Не могли бы вы подробно рассказать о том, как вы собираетесь хранить такие объекты, как ключи хранилища данных? У API поиска API нет поддержки этого типа данных. Я только спрашиваю, потому что некоторые из значений в хранилище данных - это ndb KeyProperties, которые относятся к другим объектам, поэтому передача этих типов данных в API поиска не представляется возможным. – yoonjesung

+0

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

+0

Это работает только для некоторых данных - напомним, что служба поиска поддерживает только даты, а не времена, и существуют ограничения точности и масштаба для чисел, которые мешают вам хранить многие числа, например длинные. API поиска действительно не подходит в качестве хранилища данных, за исключением конкретных случаев - это может быть нормально для вас или это может быть не – Nick

Смежные вопросы