我有这个查询返回给我年龄= 40,没有生活状态“ID”并且余额> = 20000且余额< = 30000?
的客户查询如下:
POST /bank/_search?pretty
{
"query": {
"bool": {
"must": [
{ "match": { "age": "40" } }
],
"must_not": [
{ "match": { "state": "ID" } }
],
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}
我觉得所有结果文档都具有相同的相关性,但elasticsearch已为每个文档分配了不同的分数。 示例结果:https://jsonblob.com/57de6b37e4b0dc55a4f67d54
我知道分数即将到来,因为我正在使用“匹配”查询。任何人都可以告诉: -
是否可以执行此查询以避免“匹配”并仅使用过滤器?因为我认为通过将age = 40和state =“ID”,我只是过滤结果集。
我们可以避免这种分数计算,因为在我们的场景中上述查询不需要这样做吗?
为什么这些文件的分数不同。因为查询对我来说似乎很简单,应该返回任何文档匹配此查询或不匹配。没有什么比得上匹配或稍微匹配。
答案 0 :(得分:1)
如果您不关心相关性并希望避免分数计算,您可以切换到过滤器:
POST /bank/_search?pretty
{
"query": {
"bool": {
"filter": [
{
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
},
{
"term": {
"age": "40"
}
},
{
"not": {
"term": {
"state": "ID"
}
}
}
]
}
}
}
如果您想知道为什么某些结果会得到一定的分数,您可以在查询部分上方添加explain: true
并获得分数的每个结果细分。