2013-02-01 2 views
0

저는 레일을 사용 중이며 검색 할 때 타이어와 탄성 찾기를 사용하고 있습니다. 어떤 레코드에는 값이 있고 일부 레코드에는 nil 인 문자열 유형 필드가 있습니다.탄성 찾기 : 타이어 - 필드가없는 경우 마지막으로 넣으십시오.

이 필드에 null 값이있는 모든 레코드를 정렬하여 표시하고 싶습니다. 이 문제에서 현재보고있는 https://github.com/elasticsearch/elasticsearch/issues/896에서 알 수 있듯이 sort 및 elasticsearch를 통해이 작업을 수행 할 수 없습니다.

레일을 사용할 수 있습니까? (나는 지금까지 내가 디버깅을 계속거야 이유를 이해할 수 없다)

filter :not, :missing => { :field => :video_url } if params[:video].present? 
    filter :missing, { :field => :video_url } if params[:video].blank? 

그러나 그것은 작동하지 않았다 : 나는 다음과 같은 예처럼 필터를 두 검색을 사용하여 그것을 할 노력하고 있어요.

또 다른 아이디어는 특정 필드로 두 가지 방법을 만드는 것입니다. 다른 해결책/아이디어?

업데이트 2013년 2월 2일

나는 마지막으로 다음과 같이 그것을했다 :

if video == "yes" 
     filter :not, :missing => { :field => :video_url } 
    elsif video == "no" 
     filter :missing, { :field => :video_url } 
    end 

그리고 난 내 자신에 의해 비디오 매개 변수를 전달하고있다. 검색을 정렬하고 강화하지만 추가적으로 관련성이없는 비디오 하단 필드에있는 모든 객체를 맨 아래에 표시하고자합니다. 사실이 필드로 정렬 할 필요가 없습니다. 마지막으로 무효 값 필드를 표시하기 만하면됩니다.

그래서이 문제를 해결하기 위해 검색을 두 번 호출하고 위의 코드를 추가하면 매력처럼 작동합니다. 당신이 비디오 PARAM을 전달하지 않으면

def self.search(params, video = nil) 
tire.search do 
    query do 
    boolean do 
     must { string params[:query], default_operator: "AND" } if params[:query].present? 
     must { term :active, true } 
    end 
    end 
    sort { by :update_ad => "desc" } unless params[:query].present? 
    facet "categories" do 
     terms :category_id 
    end 
    if video == "yes" 
     filter :not, :missing => { :field => :video_url } 
    elsif video == "no" 
     filter :missing, { :field => :video_url } 
    end 
end 

, 그것은 어떤 필터를 적용하지 않습니다 : 그냥 완전성에 대해

내 검색 방법은 다음이다. 내지도에서 내가 부스트, 분석기 등

당신이

+0

정렬 절은 어디에 있습니까? 당신은 정렬하지 않고 예제에서 필터링하고 있습니다. –

답변

1

먼저 감사의 Elasticsearch 당신이에 연결하고 issue을 설정은 여전히 ​​열려 있고 단지 기능 제안입니다.

둘째로, 메모와 마찬가지로 특정 레코드의 점수를 높이기 위해 반대로 정렬하고 싶으십니까? 당신이 실제로 이 필드를 정렬 할 할 경우

셋째, 가장 쉬운 방법은 지난 온다 일부 값을 바로 인덱스 필드에있다 ("ZZZ", 이상한 유니 코드 문자를, 당신은 그림을 얻는다). 기본적으로이 작업을 원하지 않으므로 multi_field 기능을 사용하는 것이 좋습니다. 물론 새로운 설정을 선택하기 위해 코퍼스를 다시 색인해야합니다.

마지막으로 스크립트로 정렬 할 수 있지만 (documentation 참고) 일반적으로 명확한 성능 영향이 있습니다.

+1

문제는 ES 0.9.0에서 수정되었습니다. – matthuhiggins

관련 문제