저는 레일을 사용 중이며 검색 할 때 타이어와 탄성 찾기를 사용하고 있습니다. 어떤 레코드에는 값이 있고 일부 레코드에는 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
끝
, 그것은 어떤 필터를 적용하지 않습니다 : 그냥 완전성에 대해
내 검색 방법은 다음이다. 내지도에서 내가 부스트, 분석기 등
당신이
정렬 절은 어디에 있습니까? 당신은 정렬하지 않고 예제에서 필터링하고 있습니다. –