同一字段的弹性搜索多个过滤器值
Elastic Search Multiple Filter values for the same field
假设我必须在 Elastic Search Index (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"]
}
}
}
}
}
假设我必须在 Elastic Search Index (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"]
}
}
}
}
}