Tire を使用して、車のデータベースのインデックス作成と検索を行っています。
create :mappings => {
:cars => {
:properties => {
:id => {:type => 'string', :index => 'not_analyzed', :include_in_all => true},
:user_id => {:type => 'string', :index => 'not_analyzed'},
:name => {:type => 'string', :analyzer => 'snowball' },
:time => {:type => 'long', :index => 'not_analyzed'},
:origin_country => {:type => 'string', :analyzer => 'keyword', :include_in_all => false},
:origin_state => {:type => 'string', :analyzer => 'keyword', :include_in_all => false},
:origin_city => {:type => 'string', :analyzer => 'keyword', :include_in_all => false},
:dealer_name => {:type => 'string', :analyzer => 'snowball', :boost => 1.5, :include_in_all => false}
}
}
}
クエリは次のようになります。
s = Tire.search Search.index_name do
query do |query|
query.text :_all, downcased_query, :type => :phrase
end
end
現在、"New York Joe Dealer" を検索すると、dealer_name が "Joe Dealer" の場合、または origin_state が "New York" の場合に一致しますが、両方は一致しません。origin_state が "New York" で "dealer_name" が "Joe Dealer" (またはそのいずれか) であると一致させる方法はありますか? アイデアは、ユーザーが fre 形式のクエリ文字列を入力して、可能な限り最適な一致を見つけられるようにすることと、ユーザーが New York Joe Dealer に入り、ニューヨークの Joe Dealer で販売されているすべての車を検索することを期待することです (または、ニューヨークまたは Joe Dealer のすべての車が下位にランク付けされます)。