사이트에서 검색 기능을 만들려고합니다. 사용자가 여러 단어를 검색하고 다양한 모델에있는 조건에 대해 하위 문자열 일치를 수행 할 수있게하려고합니다. 이 예제를 위해서여러 모델에서 여러 단어 검색
, 이제 나는 다음과 같은 모델이 있다고 가정 해 봅시다 :
- 직원
- 회사
- 카운티
카운티 여러 지방 자치 단체가 있습니다
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)
을하지만 결과 아리엘 :: 표는 열을 포함하지 않는 따라서 쿼리를 작성하는 데 사용할 수 없습니다. 이 시점에서 저는 작업 질의 작성기를 얻는 방법을 모르기 때문에 조금 붙어 있습니다.
스핑크스 또는 Solr과 같은 맞춤 검색 엔진을 적절한 보석과 함께 사용해 보셨습니까? – Bohdan
아니요, 나는 그걸 시도하지 않았습니다. 우리는 테이블 중 몇 천장의 기록을 말하고있어 과잉이라고 생각했습니다. 당신이가는 길이라고 생각하니? – rogerkk
진실을 말하면 나는 그것을 결코 사용하지 못했습니다 (어쩌면 누군가가 장단점이있는 답변을 게시하거나 http://stackoverflow.com/questions/737275/pros-cons-of-full-text-search-engine을 확인할 것입니다. -lucene-sphinx-postgresql-full-text-searc)하지만 비슷한 작업을 해결해야한다면 분명히 하나를 사용할 것입니다. – Bohdan