Elasticsearch查询返回错误结果



我是ElasticSearch的新手,正在做一些实验来学习,但我发现_search查询返回错误的结果。我使用以下代码

插入要索引的文档
PUT tryDB/_doc/2
{"personId":"2","minor":true,"money":15 }

PUT tryDB/_doc/3
{"personId":"3","minor":true,"money":20 }

PUT tryDB/_doc/4
{"personId":"4","minor":true,"money":25 }

PUT tryDB/_doc/5
{"personId":"5","minor":true,"money":30 }

PUT tryDB/_doc/6
{"personId":"6","minor":true,"money":35 }

PUT tryDB/_doc/7
{"personId":"7","minor":true,"money":40 }

PUT tryDB/_doc/8
{"personId":"8","minor":true,"money":45 }

PUT tryDB/_doc/9
{"personId":"9","minor":true,"money":55 }

PUT tryDB/_doc/10
{"personId":"10","minor":true,"money":60 }

PUT tryDB/_doc/11
{"personId":"11","minor":true,"money":65 }

PUT tryDB/_doc/12
{"personId":"12","minor":true,"money":70 }

PUT tryDB/_doc/13
{"personId":"2","minor":false,"money":80 }

PUT tryDB/_doc/14
{"personId":"2","minor":false,"money":90 }

PUT tryDB/_doc/15
{"personId":"2","minor":false,"money":100 }

PUT tryDB/_doc/16
{"personId":"2","minor":false,"money":10 }

之后,我启动了一个GET tryDB/_search查询来列出所有文档,然后返回

{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 16,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "tryDB",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"personId" : "1",
"minor" : true,
"money" : 10
}
},
{
"_index" : "tryDB",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"personId" : "2",
"minor" : true,
"money" : 15
}
},
{
"_index" : "tryDB",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"personId" : "3",
"minor" : true,
"money" : 20
}
},
{
"_index" : "tryDB",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"personId" : "4",
"minor" : true,
"money" : 25
}
},
{
"_index" : "tryDB",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"personId" : "5",
"minor" : true,
"money" : 30
}
},
{
"_index" : "tryDB",
"_id" : "6",
"_score" : 1.0,
"_source" : {
"personId" : "6",
"minor" : true,
"money" : 35
}
},
{
"_index" : "tryDB",
"_id" : "7",
"_score" : 1.0,
"_source" : {
"personId" : "7",
"minor" : true,
"money" : 40
}
},
{
"_index" : "tryDB",
"_id" : "8",
"_score" : 1.0,
"_source" : {
"personId" : "8",
"minor" : true,
"money" : 45
}
},
{
"_index" : "tryDB",
"_id" : "9",
"_score" : 1.0,
"_source" : {
"personId" : "9",
"minor" : true,
"money" : 55
}
},
{
"_index" : "tryDB",
"_id" : "10",
"_score" : 1.0,
"_source" : {
"personId" : "10",
"minor" : true,
"money" : 60
}
}
]
}
}

其余6个文件在哪里?

现在我启动了一个基于范围的查询

GET tryDB/_search
{
"query": {
"range": {
"money": {
"lte":100

}
}
}
}

进而返回

{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "tryDB",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"personId" : "1",
"minor" : true,
"money" : 10
}
},
{
"_index" : "tryDB",
"_id" : "15",
"_score" : 1.0,
"_source" : {
"personId" : "2",
"minor" : false,
"money" : 100
}
},
{
"_index" : "tryDB",
"_id" : "16",
"_score" : 1.0,
"_source" : {
"personId" : "2",
"minor" : false,
"money" : 10
}
}
]
}
}

这显然是错误的。有人能帮我弄清楚这是怎么回事吗?

其余6个文档在哪里?

当您不确定"大小"的值时,默认情况下elastic返回10个文档。

设置size:

{
"size": 20, 
"query": {
"match_all": {}
}
}
POST tryDB/_search
{
"query": {
"bool": {
"filter": [
{
"range": {
"money": {
"lte": 100
}
}
}
]
}
}
}

@rabbitbr感谢您的快速回复!嘿,我找到了解决方案(张贴在这里)根据结果,看起来像弹性搜索索引钱字符串。

我尝试建立一个显式映射,以确保货币字段索引为数字。https://opensearch.org/docs/1.3/opensearch/mappings/

这个成功了。

最新更新