2013-05-09 2 views
0

검색을 많이했는데이 질문에 대한 답변을 얻을 수 없었습니다. 반복하지 않아도됩니다.) ...ruby ​​on rails : 여러 인덱스에서 ElasticSearch/Tire 동적 검색

머리말 : 나는 ElasticSearch를 수행하는 레일 & 타이어를 사용하고 있습니다.

"name", "city", "state"및 "zip"속성을 가진 장소 Place가 있습니다. 1. 이름 만 2. (도,시 또는 우편 번호) 3. 이름을 지정하고 (도,시 또는 우편 번호) : 검색을위한 세 가지 조건이 있습니다

indexes :name, :type => 'multi_field', :fields => { 
    :name => { :type => 'string', :analyzer => 'snowball' }, 
    :"name.exact" => { :type => 'string', :index => :not_analyzed } 
} 
indexes :city 
indexes :state 
indexes :zip 

다음과 같이 그들은 인덱싱됩니다. 은 "쿼리"블록

내 코드는 다음과 같습니다

if (City, State).present? 
    boolean do 
     must { string "name:#{name}*" } if name.present? 
     must { string "city:#{city_state}*" } 
     must { string "state:#{city_state}*" } 
    end 
    elsif (Zip).present? 
    boolean do 
     must { string "name:#{name}*" } if name.present? 
     must { string "zip:#{query_parameters["zip"]}*" } 
    end 
    else 
    string "name:#{name}*" } 
    end 

상기의 검색 조건 # 1과 # 2 일 여러 테스트에 대해 예상대로. 그러나 조건 3은 그렇지 않습니다. "이름"필드에만주의를 기울이는 것으로 보입니다. "city_state"변수를 사용하여 "city"와 "state"를 검색하는 것과 관련이 있다고 가정합니다 ... 사용자가 "Chicago"또는 "Illinois"를 입력 할 수 있기 때문에이 작업을 수행하고 있습니다. City, State/Zip 텍스트 상자와 검색은 시카고의 지리적 중심이나 일리노이의 지리적 중심을 사용하여 계속 작동해야합니다.

내가 뭘 잘못하고 있나?

답변

0

그러나, 조건 3하지 않습니다 - 단지 "이름"필드

Errr에 관심을 지불 할 것,하지

string "name:#{name}*" 

정확하게 그렇게 할 말?

아니면 그냥 할 말은 않았다

string "#{name}" 
+0

명확히하려면 다음 세 가지 조건은 :이 세 가지 조건이 검색을 위해 : 1. 이름 만 2. (도,시 또는 우편 번호) 3. 이름을 AND (도시, 주 또는 우편 번호). 따라서 Name && (City, State || Zip)는 작동하지 않습니다. – CDub