2014-10-23 3 views
0

: 사용자 has_many : 책 등매우 배수가 아닌 모델 검색 - PG

내가 책이나 사용자에 대해 일치 검색을 구현하고자하지만, 책과 사용자가 너무 밀접하게 관련되어, 그것은 매우 기분이 does't 여러 개의 클래스 검색과 같습니다.

book.title 
book.description 
book.user.username 
book.user.aboutuser 

... 그리고 위 책 개체를 반환 -

는 기본적으로 나는에 대해 전체 텍스트 검색을 수행 할. 현재 저는 textacular로 놀고 있습니다. 이게 실제로 여러 클래스 검색이 아니라고 생각하는 것이 맞습니까? 누구든지 쿼리를 작성하는 방법을 알려주는 좋은 리소스를 가리킬 수 있습니까?

+0

여기 thinkbot에서 읽은 좋은 자료가 있습니다. [레일스에서 ​​Postgres로 다중 테이블 전체 텍스트 검색 구현] (https://robots.thoughtbot.com/implementing-multi-table-full-text-search-with) -postgres) – konyak

답변

1

여기서는 sunspot을 사용할 것입니다. Sorl, 아주 좋은 검색 엔진을 사용합니다. 당신의 gemfile에서

: 모델에서

rails generate sunspot_rails:install 
bundle exec rake sunspot:solr:start 

: 필요한 번들 후

gem 'sunspot_rails' 
gem 'sunspot_solr' # optional pre-packaged Solr distribution for use in development 

, 당신은 SOLR 데몬을 설정을 작성하고 실행할 수 있습니다

searchable do 
    integer :rank 
    text :title, :descritpion 
    text :aboutuser do 
     users.map { |user| user.aboutuser } 
    end 

    text :username do 
     users.map { |user| user.username } 
    end 
    end 

사용법 :

books = Book.search do 
    fulltext 'my text' 
    order_by :rank, :desc 
end 

프로덕션 서버에서 실행해야한다는 점을 제외하면 rake sunspot:solr:start을 사용해서는 안됩니다. 대신 Tomcat 또는 기타 Java 응용 프로그램 서버에 제대로 배포해야합니다.

+0

정말 고마워, 고마워. – RADan

+0

필자는 모든 기능을 갖추고 있지만 검색은 내 도서 개체가 아닌 다른 개체 (#Sunspot :: Search :: StandardSearch : 0x007f7f608b42f0>)를 반환합니다. 아마도 매우 간단 할 수도 있지만 어떤 아이디어일까요? 그 복잡한 내가 다른 질문에 스틱거야 :) – RADan

+0

당신은 그것에'''''''''''''''호출해야합니다 - AR 개체의 배열 (또는 will_paginated-array)을 줄 것입니다 :) – Esse

1

그것은 당신의 문제, 수백 또는 수백만 개의 레코드가 얼마나 큰지에 달려 있습니까? 후자에 대한 가장 일반적인 검색 엔진은 Solr 또는 Sphinx (여기서 더 많이 논의 된 비교 : Choosing a stand-alone full-text search server: Sphinx or SOLR?)이며 둘 다 레일스 지원을 사용하고 있습니다. 나는 개인적으로 스핑크스를 사용했지만 레코드가 많지 않은 경우 pg_search 보석을 사용해보십시오 (이 토론의 내용도 참조하십시오 : Any reason not use PostgreSQL's built-in full text search on Heroku?).

+0

나는 텍스쳐와 텍스쳐를 보았습니다 - pg_search를 보지 못했습니다 - 고마워요, 고마워! – RADan