Elasticsearch 过滤布尔查询
Elasticsearch Filtered Bool Query
我 运行 遇到了自定义搜索的一些严重问题。我想要的只是三个字段中的通配符搜索,结果应该由另一个字段过滤。在 Elastica 中,它会导致此查询:
{
"bool":{
"should":[
{
"wildcard":{
"ean":"*180g*"
}
},
{
"wildcard":{
"titel":"*180g*"
}
},
{
"wildcard":{
"interpret":"*180g*"
}
}
],
"filter":[
{
"term":{
"genre":{
"value":"Rock",
"boost":1
}
}
}
]
}
}
实际上我找不到错误,但 Elasticsearch 没有给我过滤结果。发生什么了? Elasticsearch returns 所有具有过滤词的项目,无论布尔值是真还是假。当我将过滤器添加为 "Must" 时,我得到了相同的结果吗?这里有什么问题!?
您需要在 bool
查询中添加 "minimum_should_match": 1
。
{
"bool":{
"minimum_should_match": 1,
"should":[
{
"wildcard":{
"ean":"*180g*"
}
},
{
"wildcard":{
"titel":"*180g*"
}
},
{
"wildcard":{
"interpret":"*180g*"
}
}
],
"filter":[
{
"term":{
"genre":{
"value":"Rock",
"boost":1
}
}
}
]
}
}
我 运行 遇到了自定义搜索的一些严重问题。我想要的只是三个字段中的通配符搜索,结果应该由另一个字段过滤。在 Elastica 中,它会导致此查询:
{
"bool":{
"should":[
{
"wildcard":{
"ean":"*180g*"
}
},
{
"wildcard":{
"titel":"*180g*"
}
},
{
"wildcard":{
"interpret":"*180g*"
}
}
],
"filter":[
{
"term":{
"genre":{
"value":"Rock",
"boost":1
}
}
}
]
}
}
实际上我找不到错误,但 Elasticsearch 没有给我过滤结果。发生什么了? Elasticsearch returns 所有具有过滤词的项目,无论布尔值是真还是假。当我将过滤器添加为 "Must" 时,我得到了相同的结果吗?这里有什么问题!?
您需要在 bool
查询中添加 "minimum_should_match": 1
。
{
"bool":{
"minimum_should_match": 1,
"should":[
{
"wildcard":{
"ean":"*180g*"
}
},
{
"wildcard":{
"titel":"*180g*"
}
},
{
"wildcard":{
"interpret":"*180g*"
}
}
],
"filter":[
{
"term":{
"genre":{
"value":"Rock",
"boost":1
}
}
}
]
}
}