2011-03-02 2 views
2

나는 Heroku에서 호스팅 될 Rails 앱을 계획 중이며 지형 공간 및 전체 텍스트 검색 기능이 모두 필요합니다.Heroku에서 호스팅되는 레일스 앱에 대한 지형 공간 검색 및 전체 텍스트 검색

나는 Heroku가 WebSolrIndexTank과 같은 애드온을 제공한다는 것을 알고 있지만 그들이 할 수있는 것처럼 들리지만, 추가 기능을 지불하지 않고도 MySQL 및/또는 PostgreSQL에서 수행 할 수 있는지 궁금합니다.

답변

2

나는 스핑크스 (sphinx), 즉 heroku에 전개 가능한 전체 텍스트 검색 엔진을 사용할 것입니다.

그것에는 지리적 검색 내장 : http://freelancing-god.github.com/ts/en/geosearching.html

편집 :

스핑크스는 Heroku가 거의 준비가되어 여기를 참조 :

+0

이 Google 그룹 소식 (구식 일 가능성이 있음)에 따르면 Sphinx는 Heroku에서 지원하지 않습니다. https://groups.google.com/forum/#!topic/thinking-sphinx/aWBIf7qhcN8 –

+0

은 방금 내 답변을 편집 했으므로 답. 질문을 더 잘 볼 수 있도록 내 대답을 삭제하는 것을 선호하는지 알려주십시오. – apneadiving

+0

+1 스핑크스가 현재 사용 가능합니다. 선택의 나의 해결책이 될 것입니다. – standup75

3

http://flying-sphinx.com/은 당신이 할 수 있어야 응용 프로그램의 규모에 따라 FULLTEXT 및 SPATIAL 인덱스를 MySQL에서 쉽게 수행 할 수 있습니다. 응용 프로그램의 처리 속도가 빨라지면 (즉, 동시 실행 속도가 빨라지고 초당 수천 개의 요청이 수억 개가되는 경우) FULLTEXT 또는 SPATIAL 쿼리를 위해 다른 솔루션으로 이동해야 할 수 있습니다. 그러나 초기에 최적화하는 것을 권장하지 않습니다. 제대로 수행하기가 어려울 수 있기 때문입니다. 가까운 미래에 MySQL은 충분할 것입니다.

MySQL here에서 공간 인덱스에 대해 읽을 수 있습니다. MySQL here에서 전체 텍스트 색인을 읽을 수 있습니다. 마지막으로, here에 설명 된 단계를 수행하여 schema.rb 파일과 레이크 작업을이 두 가지 인덱스 유형과 함께 사용하는 것이 좋습니다.

나는 둘 다 MySQL을 사용했지만, PostgreSQL은 훌륭한 지리 공간적 인덱스 솔루션을 가지고 있다고 생각합니다.

+0

+1 ActiveRecord에 mysql 공간 지원을 추가하기위한 좋은 보석을 알고 계십니까? –

+0

저는 rgeo (https://github.com/dazuma/rgeo)를 정말 좋아하며 전에 geokit과 GeoRuby를 조합하여 사용했습니다. –

3

데이터베이스가 Heroku 인 경우 전체 텍스트 검색 : http://www.postgresql.org/docs/8.3/static/textsearch.html에 대한 Postgres의 지원을 사용할 수 있습니다. Heroku가 실행하는 가장 오래된 서버 (공유 데이터베이스 용)는 8.3과 8.4에 있습니다. 최신 버전은 9.0입니다.

이 작은 사실을 알아 차리지 블로그 포스트는 여기에서 볼 수있다 : https://tenderlovemaking.com/2009/10/17/full-text-search-on-heroku.html

분명히, "texticle"(ㅎ 귀엽다..) 부가 기능은 꽤 잘 ... 작동합니다. 내가 아는 바로는 당신에게 맞는 색인을 만들 수도 있습니다.

Postgres 전체 텍스트 검색은 Solr 또는 IndexTank의 벨과 휘슬을 제공하지는 않지만 Rails 통합이 좋지 않을 수도 있지만 매우 빠르고 소란스럽지 않습니다. 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를 통해 징발 될 수 있습니다. PostGIS는 지리적 데이터 색인 및 쿼리를위한 매우 강력하고 완벽한 기능을 갖춘 시스템입니다. OpenStreetMap은 PostgreSQL 지오메트리 유형 (내장)을 광범위하게 사용하며, 많은 사람들이이를 PostGIS와 결합하여 큰 효과를냅니다.

    이 두 가지 (전체 텍스트 검색, PostGIS)는 Postgres의 확장 가능한 데이터 유형 및 색인 인프라를 활용하므로 많은 레코드에 대해 높은 성능을 발휘할 것으로 기대해야합니다. 상황이 파열 된 경우 상황). 트랜잭션 및 구조화 된 데이터와 함께 이러한 기능을 활용할 수 있다는 사실을 활용할 수도 있습니다. 예 :

    CREATE TABLE products (pk bigserial, price numeric, quantity integer, description text);은 전체 텍스트 검색과 마찬가지로 쉽게 사용할 수 있습니다. 모든 텍스트 필드가 수행하며 일반 특성 (이 경우 가격, 수량)과 관련 될 수 있습니다.

  • 0

    IndexTank는 현재 Heroku에서 최대 100,000 개의 문서까지 무료이며 문서를 업데이트하지 않았습니다. 이것은 당신의 요구에 충분하지 않을 수도 있습니다,하지만 나는 당신을 위해 알려주 리라고 생각했습니다.

    0

    Postgre를 통한 전체 텍스트 검색을 위해 pg_search을 권하고 싶습니다. 지금 바로 나에게 영웅을 사용하고 있습니다. 나는 texticle을 사용하지 않았지만 최근에 pg_search가 더 많은 개발 활동을하고 있으며 텍스쳐를 기반으로 작성되었습니다 (인덱스를 추가하지 않을 것이므로 직접 작성해야합니다).

    지금 스레드를 찾을 수 없지만 Heroku가 pg geo 검색을위한 옵션을 제공했지만 베타 버전으로 제공되는 것을 보았습니다.

    내 조언은 postgre 솔루션을 (EC2 인스턴스에서) SOLR 인스턴스를 호스팅하고 sunspot solr gem을 사용하여 레일과 통합하는 것입니다.

    나는 내 솔루션을 구현했으며 WebSolr도 사용했습니다. 기본적으로 SOLR 인스턴스를 무료로 제공합니다. 제 의견으로는 그럴 가치가 있습니다. 태양 흑점 solr 클라이언트를 사용하는 통합을 위해, SOLR을 호스트하기 위해 누군가 20 $/40 $/...을 지불 할 것입니다. 나는 또한 당신이 백업, 정비 등을 얻는다는 것을 알고있다. 그러나 나에게 자기 자신의 인스턴스를 더 싼 단다라고 부른다. 또한 WebSolr은 1.4.x 버전의 SOLR에서 잠겨 있습니다.