Подтвердить что ты не робот

API поиска приложений по сравнению с хранилищем данных

Я пытаюсь решить, должен ли я использовать API поиска приложений или Datastore для Android-проекта с подключением к приложениям. Единственное отличие, которое делает документация google:

... индексный поиск может найти не более 10 000 соответствующих документов. Хранилище App Engine Datastore может быть более подходящим для приложений, которые необходимо получить очень большие результирующие наборы.

Учитывая, что я уже очень хорошо знаком с хранилищем данных: будет ли кто-то помогать мне, если мне не нужны 10000 результатов?

  • Есть ли какие-либо преимущества в использовании Search API по сравнению с использованием Datastore для моих запросов (в приведенной выше цитате кажется разумным использовать один или другой)? В моем случае конечный пользователь должен иметь возможность поиска, обновления существующих записей и создания новых объектов. Например, если мое приложение является книжным магазином, пользователь должен иметь возможность добавлять новые книги, добавлять отзывы в существующие книги, искать определенную книгу.
  • Моя структура данных такова, что контент будет предоставлен конечным пользователем. Документ против объекта хранилища данных: что дешевле для обновления? $$ и т.д.
  • Могут ли они дополнять друг друга: Datastore и Search API? Какое преимущество? Почему бы кто-то подумал о спаривании двух? Какая уловка/стоимость?
4b9b3361

Ответ 1

Ключевое отличие состоит в том, что с хранилищем данных вы не можете искать внутри объектов. Если у вас есть книга под названием "Война и мир", вы не можете ее найти, если пользователь вводит "военный мир" в поле поиска. То же самое с отзывами и т.д. Поэтому для вас это не вариант.

Ответ 2

Дополнительная информация:

  • Хранилище данных - это транзакционная система, которая важна во многих случаях использования. API поиска нет. Например, вы не можете помещать и удалять и документировать в индексе поиска в одной транзакции.
  • У хранилища данных много общего с базами данных NoSql, такими как Cassandra, в то время как API поиска - это текстовая поисковая система, очень похожая на что-то вроде Lucene. Если вы понимаете, как работает обратный индекс, вы сможете лучше понять, как работает API поиска.
  • Очень хорошая причина для объединения использования API хранилища данных и API поиска заключается в том, что хранилище данных очень затрудняет выполнение некоторых типов запросов (например, бесплатных текстовых запросов, геопространственных запросов), которые API поиска обрабатывает очень легко. Таким образом, вы можете хранить ваши основные объекты в хранилище данных, но затем использовать API поиска, если вам нужно искать, как это не позволяет хранилище данных. В будущем, я думаю, было бы здорово, если бы datastore и API поиска были бы более тесно интегрированы, например, позволяя вам выполнять бесплатный текстовый поиск с индексированными текстовыми полями, где механизм приложения автоматически создавал бы индекс поиска документов за кулисами для вас.

Ответ 3

Самая серьезная проблема API поиска - это конечная последовательность, как указано здесь: https://developers.google.com/appengine/docs/java/search/#Java_Consistency

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

Я думаю, что API поиска хорош только для одного: Поиск. Он в основном действует как поисковая система для ваших данных в хранилище данных.

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

Ответ 4

Datastore предоставляет только несколько операторов запроса (=,! =, <, > ), делая вложенные фильтры и множественные неравенства либо дорогостоящими, либо невозможными (тайм-ауты), а результаты поиска могут давать много Ложные положительные стороны. Вы можете выполнять частичный поиск строк с помощью токенизации, но это раздувает вашу сущность. Лучший способ преодолеть эти ограничения - использовать Структурированные свойства и/или Запросы предков.

API поиска, с другой стороны, выполняет полнотекстовый поиск в поисковых документах, который быстрее и точнее, чем запросы NDB, не полагаясь на токенизированные данные. Даунсайд полагается на то, что данные остаются в курсе последних событий.

Используйте Datastore для обработки ваших данных (создания, обновления, удаления), а затем запустите функцию для размещения этих данных в виде документов и кластера с использованием индексов, а затем выполните поиск с помощью API поиска.