2011-08-11 6 views
1

사이트에서 검색 기능을 만들려고합니다. 사용자가 여러 단어를 검색하고 다양한 모델에있는 조건에 대해 하위 문자열 일치를 수행 할 수있게하려고합니다. 이 예제를 위해서여러 모델에서 여러 단어 검색

, 이제 나는 다음과 같은 모델이 있다고 가정 해 봅시다 :

  • 직원
  • 회사
  • 카운티

카운티 여러 지방 자치 단체가 있습니다

  • 지방 자치 단체를, 여러 직원이있는 여러 회사가 있습니다.

    Employee.firstname, Employee.lastname, Company.name, Municipality.name 및 County.name의 조합에 대해 검색 할 수 있도록 검색 결과를 Employee 인스턴스로하고 싶습니다.

    예를 들어 문자열 "joe tulsa"를 검색하면 앞 문장에서 지정한 속성의 어딘가에서 두 단어를 찾을 수있는 모든 직원이 반환됩니다. 나는 틀린 긍정을 얻을 것이다. 그러나 적어도 나는 Tulsa 카운티에서 "Joe"라고 불리는 모든 직원을 얻어야한다.

    나는 두 가지 접근법을 시도했지만 올바른 경로로 가고 있는지 확신하지 못합니다. 나는 이것을하기위한 좋은 RoR-ish 방법을 찾고 있는데, 더 많은 RoR 지혜를 가진 누군가가 적절한 해결책을 도울 수 있기를 바라고 있습니다.


    내가 시도하는 것 :

    나는 매우 검색 이런 종류의 경험이 아니지만, RoR에 외부 I 수동 함께 모든 테이블을 조인하는 SQL 문을 만들 것을 여기서 절을 만들 각 개별 검색 단어에 대해 서로 다른 표를 포함합니다. 아마도 빌더를 사용하십시오. 그런 다음 쿼리를 실행하고 결과를 반복하고 Employee 객체를 수동으로 인스턴스화 한 다음 배열에 추가합니다.

    1) 직원 모델에 해당하는 내 프로젝트에서 어떤에서 명명 된 범위와 취미 삼아,하지만 난 테이블 두 개 이상의에 참여하는 데 필요한 때 나는 붙어있어 :

    가의 RoR에서이 문제를 해결하기 위해, 나는 봤는데 "계단"(Municipality and County).

    2) 쿼리를 단순화하기 위해 모든 테이블을 함께 결합하는보기 ("search_view"라고 함)가 만들어졌습니다. 그렇다면이 테이블에서 Employee.find_by_sql()을 사용하면 좋은 직원 객체를 얻을 수 있다고 생각했습니다. 나는 SQL을 작성하기 위해 빌더를 사용하여 줄 알았는데, Arel가 사용하는 일이었다 듯, 그래서 나는 같은 일을 시도 :

    view = Arel::Table.new(:search_view) 
    

    을하지만 결과 아리엘 :: 표는 열을 포함하지 않는 따라서 쿼리를 작성하는 데 사용할 수 없습니다. 이 시점에서 저는 작업 질의 작성기를 얻는 방법을 모르기 때문에 조금 붙어 있습니다.

  • +2

    스핑크스 또는 Solr과 같은 맞춤 검색 엔진을 적절한 보석과 함께 사용해 보셨습니까? – Bohdan

    +0

    아니요, 나는 그걸 시도하지 않았습니다. 우리는 테이블 중 몇 천장의 기록을 말하고있어 과잉이라고 생각했습니다. 당신이가는 길이라고 생각하니? – rogerkk

    +0

    진실을 말하면 나는 그것을 결코 사용하지 못했습니다 (어쩌면 누군가가 장단점이있는 답변을 게시하거나 http://stackoverflow.com/questions/737275/pros-cons-of-full-text-search-engine을 확인할 것입니다. -lucene-sphinx-postgresql-full-text-searc)하지만 비슷한 작업을 해결해야한다면 분명히 하나를 사용할 것입니다. – Bohdan

    답변

    3

    이런 식으로 적절한 검색 엔진을 사용하는 것이 좋습니다. 이렇게하면 삶이 훨씬 쉬워 질 것입니다. 나는 비슷한 문제가 있었고 "Boy, Sphinx와 같은 것을 설정하는 것은 수천 개의 매뉴얼과 튜토리얼을 먼저 읽어야 함을 의미합니다"라고 생각했습니다. 글쎄, 그건 사실이 아니야.

    생각하고있는 스핑크스은 레일스 젬입니다. 스핑크스를 통합하는 것이 매우 쉽습니다. 당신은 시작하는 모두에서 많은 경험이 필요하지 않습니다

    http://freelancing-god.github.com/ts/en/

    내가 다른 검색 엔진을 시도하지 않은,하지만 난 스핑크스에 매우 만족 해요. 나는 하루 안에 비교적 복잡한 실시간 검색을 설정할 수 있었다.

    +0

    고마워, 지금 생각하고있는 스핑크스를 찾고있다. 나는 또한 Thinking Sphinx (http://stackoverflow.com/questions/7039142/thinking-sphinx-and-searching-multiple-models)와 문제 해결을 위해 특별히 지시 한 새로운 질문을 게시했습니다. 더 나은 응답이 나오지 않는 한 잠시 후 응답을 표시하겠습니다. :) – rogerkk

    관련 문제