Предложения по многогранному стеку программного обеспечения для поиска

Мне нужно создать средство поиска в рамках нового проекта для клиента. Записями будут события, происходящие в одну или несколько конкретных дат. Было бы здорово получить совет SO о том, какие инструменты лучше всего использовать для следующих требований:

  1. Требуется (многогранный) поиск десятков тысяч записей (на основе таких полей, как категория, дата, цена и т. д.)
  2. Необходимо искать в полях с несколькими значениями (т.е. тегах)
  3. Должна быть возможность упорядочивать по статическим факторам (таким как цена, расстояние и т. д.)
  4. Должна быть возможность упорядочивать по динамическим/часто меняющимся факторам (таким как вовлеченность пользователей/трафик и т. д.)
  5. Должен иметь возможность возвращать только те записи, для которых была активность в собственной социальной сети пользователя (например, «показывать мне только результаты, с которыми взаимодействовали мои друзья»).
  6. Будет развернут в EC2

Мои текущие мысли таковы:

  1. Используйте гибрид чего-то вроде Amazon CloudSearch и Redis
  2. Десятки тысяч на самом деле не так уж много записей. Возможно, вы выполняете основную часть работы в СУБД с помощью CloudSearch для полнотекстового поиска?
  3. Используйте Redis для ведения наборов записей, с которыми недавно взаимодействовали, для каждого пользователя, а затем объедините их, чтобы получить записи в сети пользователя.

Меня больше всего беспокоит задержка при извлечении, возможно, многих тысяч идентификаторов из различных служб (Redis/CloudSearch), а затем их объединение в клиентском коде. Однако, возможно, это необоснованно.

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

Любые предложения приветствуются!


person Adam Charnock    schedule 11.09.2013    source источник


Ответы (1)


Я рекомендую вам Amazon CloudSearch для вашего требования:

  • Требуется (многогранный) поиск десятков тысяч записей (на основе таких полей, как категория, дата, цена и т. д.)

CloudSearch действительно хорош, когда дело доходит до многогранного поиска. Он широко используется на собственном веб-сайте Amazon. И это процесс молниеносный. Индекс поиска хранится в памяти, чтобы гарантировать, что запросы могут обслуживаться с очень высокой скоростью.

  • Необходимо искать в полях с несколькими значениями (т.е. тегах)

Нет проблем (для любой поисковой системы)

  • Должна быть возможность упорядочивать по статическим факторам (таким как цена, расстояние и т. д.)

Нет проблем (для любой поисковой системы)

  • Должна быть возможность упорядочивать по динамическим/часто меняющимся факторам (таким как вовлеченность пользователей/трафик и т. д.)

Вы можете установить «формулу» в CloudSearch. Это повысит или понизит рейтинг вашего запроса. Обычно используется для: - предоставления "свежего" контента за счет повышения ранжирования результатов на основе даты публикации. - повышение популярного результата

CloudSearch отлично справляется с этой задачей. Так что, похоже, он вам подойдет.

  • Должен иметь возможность возвращать только те записи, для которых была активность в собственной социальной сети пользователя (например, «показывать мне только результаты, с которыми взаимодействовали мои друзья»).

Думаю, с этим проблем нет.

  • Будет развернут в EC2

Победа CloudSearch. Ваш запрос останется в сети Amazon. Заставить вас запрос гораздо быстрее, чем через Интернет.

Меня больше всего беспокоит задержка при извлечении, возможно, многих тысяч идентификаторов из различных сервисов (Redis/CloudSearch).

CloudSearch не будет тормозить. В зависимости от нагрузки может быть автоматически: обновление оборудования (экземпляр большего размера), запуск нового экземпляра, разделить данные между экземплярами.

Может быть, вы можете переключиться на SimpleDB с Amazon вместо Redis? Это позволит вам легко масштабироваться. Но нередко при использовании Amazon Cloud Search (или любой базы данных поисковой системы) используется другая база данных.

Возможно, вы выполняете основную часть работы в СУБД с помощью CloudSearch для полнотекстового поиска? Может быть. Но будьте осторожны, РСУБД не масштабируется так же легко, как Cloud Search.

Кстати, это создатель Amazing Cloud Search, но я не работаю для Amazon Cloud Search :-) Я просто чувствую, что технология действительно великолепна (когда она соответствует вашим потребностям).

Надеюсь, это поможет. И надеюсь, что это не слишком грязно.

person Martin Magakian    schedule 12.09.2013
comment
Спасибо! Ваши ответы кажутся разумными, я только что понял, что CS может обрабатывать поля с несколькими значениями. Теперь меня беспокоит только то, что: 1) помимо обновления записей в CS каждые 10 минут, я не думаю, что ранговые выражения позволят мне упорядочивать часто меняющиеся значения. Кроме того, 2) я не вижу, как я могу хранить данные, необходимые для «в моей социальной сети» в CS. Тем не менее, CS выглядит как отличный вариант, и большое спасибо, что поделились своими мыслями :-) - person Adam Charnock; 12.09.2013
comment
@AdamCharnock 1) Вам нужно найти способ сохранить целочисленное значение в вашей базе данных CloudSearch. Что-то вроде часто_изменения. Затем вы сможете влиять на ранжирование результатов, используя пользовательскую формулу поиска. Пример: порядок = рейтинг * частота_изменений 2) да, возможно, вы не можете - person Martin Magakian; 12.09.2013
comment
@AdamCharnock, вы можете проголосовать и/или принять ответ, если хотите. - person Martin Magakian; 13.09.2013
comment
Сделанный! Извините, что отнял у меня время :) - person Adam Charnock; 24.09.2013