Полнотекстовый поиск в Google App Engine (Java) - PullRequest
7 голосов
/ 11 декабря 2010

Есть несколько тем по этой теме, но я думаю, что мой вариант использования несколько отличается.

Что я хочу сделать:

  • Компонент полнотекстового поиска для моего приложения GAE / J
  • Размер индекса невелик: 25-50 МБ или около того
  • Мне не нужны живые обновления индекса, периодическая повторная индексация - это хорошо
  • Это для автозаполнения и тому подобного, поэтому оно должно быть очень быстрым (у меня сложилось впечатление, что реализация инвертированного индекса в хранилище данных приводит к значительной задержке)

Моя стратегия до сих пор (просто планирую, еще ничего не пыталась реализовать):

  • Использовать Lucene с RAMDirectory
  • Периодическое задание cron создает индекс, сериализует его в хранилище данных, сохраняет идентификатор обновления (или метку времени)
  • Сервлет поиска загружает индекс при запуске и создает RAMDirectory
  • При каждом запросе сервлет проверяет текущий идентификатор обновления и при необходимости перезагружает индекс

Главное, на чем я не уверен, как синхронизировать данные в памяти между экземплярами - сработает ли это, или я что-то упустил?

Кроме того, как далеко я могу нажать его, прежде чем у меня начнутся проблемы с использованием памяти? Я не мог найти что-нибудь о квотах RAM для GAE. (Этот индекс небольшой, но я могу придумать еще кое-что, что хотел бы добавить)

И, конечно, есть мысли о лучших подходах?

Ответы [ 5 ]

1 голос
/ 19 мая 2012

Недавно в GAE добавлена ​​услуга «текстовый поиск». Взгляните на GAE текстовый поиск Java

1 голос
/ 13 декабря 2010

Если у вас все в порядке с периодическими перестройками, и у вас небольшой индекс, ваш текущий подход звучит в основном нормально. Однако вместо того, чтобы создавать индекс онлайн и сериализовать его в хранилище данных, почему бы не создать его в автономном режиме и загрузить его вместе с приложением? Затем вы можете создать его экземпляр непосредственно из хранилища дисков, а для установки обновления развернуть новую версию своего приложения.

0 голосов
/ 25 мая 2012

App Engine теперь включает API полнотекстового поиска (экспериментальный): https://developers.google.com/appengine/docs/java/search/

0 голосов
/ 16 июня 2011

Ну, по состоянию на GAE 1.5.0 похоже, что резиденты Backends могут быть использованы для создания службы поиска.

Конечно, для них нет бесплатной квоты.

0 голосов
/ 06 января 2011

Для автозаполнения, возможно, вы могли бы сохранить лучшие N совпадений для каждого префикса (в основном то, что вы положили бы в раскрывающемся меню) в memcache?Объекты memcache могут быть поддержаны объектами в хранилище данных и при необходимости перезагрузиться.

...