假设我必须在弹性搜索索引(ES 7.15)中过滤汽车构造器,其中字段car_maker
映射到keyword
,使其在汽车制造商字符串名称中具有有限数量的可能性:
{
"mappings": {
"properties": {
"car_maker": {
"type": "keyword"
}
}
}
}
GET /cars/_search
{
"query": {
"bool": {
"filter": [{
"term": {
"car_maker": "Honda"
}
}]
}
}
}
这个和匹配查询一起工作就可以了。filter
将不参与分数计算。现在我想为该查询(假设是should
查询)过滤更多的汽车制造商:
{
"query": {
"bool": {
"filter" : [
{"term" : { "car_maker" : "Honda"}},
{"term" : { "car_maker" : "Ferrari"}}
]
}
}
}
这是行不通的。我会有任何错误从ES查询引擎,但任何结果太。当然,总是可以将更多的过滤器应用到不同的字段,如car_maker
和car_color
,但如何做相反的:应用更多的值(Honda
,Ferrari
等)到相同的过滤器字段car_maker
,如在上面的例子中,没有条件的分数计算?
您可能想尝试以下过滤器查询:
{
"query" : {
"bool" : {
"filter" : {
"terms" : {
"car_maker" : ["Honda", "Ferrari"]
}
}
}
}
}