我想查询我的索引,但应用2个过滤器。 第一,价格和第二位置。
var qobject = {
query:{
custom_score:{
query:{
filtered:{
query:{
multi_match:{
query: q,
fields: ['title','description'],
}
},
filter:{
range:{
price: { from: 0, to: max_price }
},
geo_distance:{
'distance': distance + 'mi',
'location':{
lat: lat,
lon: lon
}
}
}
}
},
script: '_score + _source["price"] * 10'
}
}
}
elasticSearchClient.search('products', 'products', qobject)
如您所见,此查询对象会导致错误。
但是,如果我删除范围或geo_distance ,一切都很好!但我想要两个过滤器......
答案 0 :(得分:2)
使用'和'过滤器。
http://www.elasticsearch.org/guide/reference/query-dsl/and-filter.html
没有测试:
var qobject = {
query:{
custom_score:{
query:{
filtered:{
query:{
multi_match:{
query: q,
fields: ['title','description'],
}
},
filter:{
"and" : [
range:{
price: { from: 0, to: max_price }
},
geo_distance:{
'distance': distance + 'mi',
'location':{
lat: lat,
lon: lon
}
}
]
}
}
},
script: '_score + _source["price"] * 10'
}
}
}
解释:'过滤'部分'过滤后的查询'实际上可以是您喜欢的任何类型的过滤器,包括'和'。一旦明确了这个概念,构建复杂的查询/过滤器就非常简单了。