2011-07-04 4 views
1

나는 ElasticSearch 용 Tire 보석과 함께 레일을 사용하고 있으며 여러 모델을 검색해야합니다. 뭔가 같이 :많은 유형의 탄성 검색

# title is a field in all models 
Tire.search :tasks, :projects, :posts, { :title => "word" } 

(루씬) 문서의 방향이 내가 모델 하나 하나를 검색 한 후 결과를 처리 할 수 ​​있습니다 알고 있지만 그 ElasticSearch을 고려하여 불필요한해야합니다.

의견이 있으십니까?

감사합니다.

+0

안녕하세요, 유스 케이스가 무엇인지 명확하게 설명해 주시겠습니까? ActiveModel 통합은 한 모델 당 검색 메소드를 공개합니다. 그러나 예제에서와 같이'Tire.search' 메소드를 사용하면 실제로 둘 이상의 인덱스를 검색 할 수 있습니다. 문제는, 당신의 모델 클래스가 아니라'Tire :: Results :: Item' 클래스로 레코드를 래핑하는 것입니다. 그러나 이것은 제가 어쨌든 중력을 받고있는 행동입니다. 결과를이 자유 형식 클래스로 랩 한 다음 "실제 모델"을로드하는 방법을 제공하십시오. https://github.com/karmi/tire/issues/11 및 https://github.com/karmi/tire/issues/12에서 문제를 확인하십시오. – karmi

+1

@karmi, 나는'Tire.search {...}'를 시도했지만 적어도 현재 우리가 사용하고있는 버전 인 0.1.13에서는 지원하지 않았다. 최대한 빨리 보석 버전을 업데이트하겠습니다. 어쨌든 필터링을 위해'type'을 사용하면서 동일한 인덱스를 검색하는 것은 우리의 경우에 꽤 잘 작동합니다. 귀하의 회신에 감사드립니다. –

답변

1

하나의 가능성은 별개의 모델이 아닌 것으로 보는 것입니다. 복합 모델은 모든 문서가 여러 값을 가질 수있는 문자열 상수로 식별되는 하나 이상의 여러 하위 모델에 속하는 항목이 될 수 있습니다.

해당 서브 모델 중 하나에서 결과 만 검색하려면이 서브 모델에 속한 문서 세트를 식별하는 고정 부분을 조회에 추가 할 수 있습니다.

유일한 암시는 고유 한 기본 키가 있어야한다는 것입니다 (내재 된 문서 키와 같은 것을 사용할 수 있기 때문에 그렇게 나쁘지 않습니다).

+1

표준화되지 않은 이름을 가진 필드가 있기는하지만 좋은 접근법으로 보입니다. 감사. –

관련 문제