검색을 많이했는데이 질문에 대한 답변을 얻을 수 없었습니다. 반복하지 않아도됩니다.) ...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 텍스트 상자와 검색은 시카고의 지리적 중심이나 일리노이의 지리적 중심을 사용하여 계속 작동해야합니다.
내가 뭘 잘못하고 있나?
명확히하려면 다음 세 가지 조건은 :이 세 가지 조건이 검색을 위해 : 1. 이름 만 2. (도,시 또는 우편 번호) 3. 이름을 AND (도시, 주 또는 우편 번호). 따라서 Name && (City, State || Zip)는 작동하지 않습니다. – CDub