我正在使用轮胎来索引和搜索汽车数据库:
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”(或两者之一)?这个想法是我希望用户输入一个格式查询字符串并能够找到可能的最佳匹配,并且他们希望用户进入纽约 Joe Dealer 并找到在纽约 Joe Dealer 出售的所有汽车(或纽约或乔经销商的所有汽车排名较低)。