Геопространственный и полнотекстовый поиск для приложения Rails, размещенного на Heroku - PullRequest
2 голосов
/ 03 марта 2011

Я планирую приложение Rails, которое будет размещено на Heroku и потребует как геопространственного, так и полнотекстового поиска.

Я знаю, что Heroku предлагает надстройки, такие как WebSolr и IndexTank , которые звучат так, будто они могут выполнять свою работу, но мне было интересно, можно ли это сделать в MySQL и / или PostgreSQL без необходимости платить за какие-либо дополнения?

Ответы [ 5 ]

3 голосов
/ 03 марта 2011

В зависимости от масштаба вашего приложения вы сможете с легкостью выполнять как FULLTEXT, так и SPATIAL индексы в MySQL.Как только ваше приложение станет массивным, то есть сотнями миллионов строк с высокой степенью параллелизма и множеством тысяч запросов в секунду, вам может потребоваться перейти к другому решению для запросов FULLTEXT или SPATIAL.Но я бы не советовал оптимизировать для этого на раннем этапе, так как это может быть очень трудно сделать правильно.Для обозримого будущего должно хватить MySQL.

Вы можете прочитать о пространственных индексах в MySQL здесь .Вы можете прочитать о полнотекстовых индексах в MySQL здесь .Наконец, я бы рекомендовал предпринять шаги, описанные здесь , чтобы ваш файл schema.rb и задачи rake работали с этими двумя типами индексов.

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

3 голосов
/ 03 марта 2011

Если у вас есть база данных в Heroku, вы можете использовать поддержку Postgres для полнотекстового поиска: http://www.postgresql.org/docs/8.3/static/textsearch.html. Самые старые серверы, на которых работает Heroku (для общих баз данных), находятся на 8.3 и 8.4. Самые новые на 9.0.

Сообщение в блоге, отмечающее этот маленький факт, можно увидеть здесь: https://tenderlovemaking.com/2009/10/17/full-text-search-on-heroku.html

Очевидно, что этот "текстильный" (хех. Милый.) Аддон работает ... довольно хорошо. Насколько я понимаю, он даже создаст нужные вам индексы.

Вот основная история: полнотекстовый поиск postgres довольно быстрый и без суеты (хотя интеграция с Rails может и не быть хорошей), хотя он не предлагает наворотов Solr или IndexTank. Обязательно прочитайте о том, как правильно настроить индексы GIN и / или GiST, и используйте типы tsvector / tsquery.

Краткая версия:

  • Создать (в данном случае на основе выражений) индекс: CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', body));. В этом случае «тело» - это индексируемое поле.
  • Используйте оператор @@: SELECT * FROM ... WHERE to_tsvector('english', pgweb.body) @@ to_tsquery('hello & world') LIMIT 30

Сложная часть может заключаться в том, чтобы сопоставить вещи обратно в область применения, о чем говорится в сообщении, которое ранее упоминалось в блоге.

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

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

CREATE TABLE products (pk bigserial, price numeric, quantity integer, description text); можно так же легко использовать при полнотекстовом поиске ... подойдет любое текстовое поле, и оно может быть связано с обычными атрибутами (цена, количество в данном случае).

2 голосов
/ 03 марта 2011

Я бы использовал интеллектуальный сфинкс, полнотекстовый поисковый движок, также развернутый на heroku.

Имеет встроенный гео-поиск: http://freelancing -god.github.com / ts / en / geosearching.html

EDIT:

Сфинкс почти готов к герою, см. Здесь: http://flying -sphinx.com /

0 голосов
/ 04 июня 2012

Для полнотекстового поиска через Postgre я рекомендую pg_search , сейчас я использую его на heroku.Я не использовал textile , но из того, что я вижу, в последнее время pg_search больше занимается разработкой, и он был построен на основе Textile (он не будет добавлять индексы для вас, вам придется делать это самостоятельно).

Я не могу найти ветку сейчас, но я увидел, что Heroku предоставил опцию для pg geo search, но она была в бета-версии.

Мой совет: если вы не можете найти решение postgre, вам нужно разместить собственный экземпляр SOLR (на экземпляре EC2) и использовать sunspot solr gem для его интеграции с рельсами.

Я реализовал собственное решение и также использовал WebSolr .По сути это то, что они дают вам свой собственный экземпляр SOLR без проблем.Стоит ли денег, на мой взгляд, нет.Что касается интеграции, в которой также используется клиент sunspot solr, то вы просто заплатите кому-нибудь 20 $ / 40 $ / ... за то, что он разместит SOLR для вас.Я знаю, что вы также получаете резервные копии, обслуживание и т. Д., Но называйте меня дешево, я предпочитаю свой собственный экземпляр.Также WebSolr заблокирован в версии SOLR 1.4.x.

0 голосов
/ 11 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...