2013-06-28 1 views
1

안녕하세요 저는 태양 흑점과 solr를 사용하는 새로운 레일 개발자입니다.면도날 추가/빼기

searchable do 
    text :name, :boost => 10 
    text :description 
    text :tags do 
    tags.map(&:name) 
    end 
    text :ingredients do 
    ingredients.map(&:ingredient) 
    end 
    string :ingredients, :multiple => true do 
    ingredients.map(&:ingredient) 
    end 
    string :user 
end 

내 컨트롤러 :

@search = Recipe.search do |query| 
    query.fulltext params[:search] 
    query.paginate(:page => params[:page] || 1, :per_page => 20) 
end 
@recipes = @search.results 

내가 레시피 검색 엔진을 짓고 있어요

여기 내 검색 블록입니다. 기본적으로, 지금 당장은 요리법, 재료 및 태그와 관련된 조리법 이름을 검색하고 일치하는 요리법을 표시 할 수 있도록했습니다.

그러나 내가 볼 수 있듯이 나는 이미 문자열을 만들었던 재료에 대해 패싯 검색을하려고합니다.

나의 목표는 당신이 지금 할 수있는 것처럼 조리법을 검색 할 수 있지만 더하기 기호 다음에 다음 재료를 추가하면 검색에 직면하게되고 빼기 기호와 마찬가지로 조리법을 찾을 수있게하는 것입니다.

Chicken Piccata +lemon => searches for chicken piccata with lemon 
Chicken Piccata -lemon => searches for chicken piccata without lemon 

내가 이런 식으로 뭔가를하려고했는데 : : 그래서 예를 들어 여기에 쿼리

with(:ingredients, params[:ingredients]) if params[:ingredients].present? 

하지만 난 어떻게의 +/- 측면을 처리하는 아무 생각이 없습니다. 내가 어떻게 이걸 이룰 수 있니?

감사합니다.

답변

1

Sunspot 쿼리 작성에 대한 확실하지 않음.
Solr은 부울 연산자를 지원하므로 NOT (-)이 지원되므로 단어가없는 결과가 반환됩니다.

그래서 Chicken Piccata lemon - 기본 연산자>과는 또

모든 결과를 다시 반환해야합니다, SOLR는 NOT 연산자 그래서 Chicken Piccata -lemon는 내용의 레몬이없는 모든 결과로 해석 얻을 것입니다 지원합니다.

-ingredients:lemon을 쿼리하여 결과를 제외 할 수도 있습니다.

+0

도움 주셔서 감사합니다. 좋은 대답 –