首页 > 解决方案 > 查询 elasticsearch 可以通过 id 获取文档,但在查询 all 中找不到

问题描述

我使用的是 ES 2.3,现在我将它升级到 ES 7.4。数据是通过自动测试生成的。所以它总是32个文档。

我发现当我使用带有查询全部的 ES 2.3 时,我得到了所有 32 个文档。例如,data.id: 5dba917f61b48a327c948557可以在结果中找到该文档。我可以通过查询data.id,文档也可以找到。

但是如果我使用 ES 7 做同样的事情,我CAN NOT会找到所有查询中的文档,data.id:5dba917f61b48a327c948557 例如。http://localhost:9200/test-auditing-2019-10/_search?pretty=true结果。

{
  "took" : 16,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 32,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test-auditing-2019-10",
        "_type" : "_doc",
        "_id" : "J0LIIG4Bw-26hPm9OiXO",
...

我在查询http://localhost:9200/test-auditing-2019-10/_search?q=data.id:5dba917f61b48a327c948557&pretty=true时确实得到了文件。

...
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 2.3795462,
    "hits" : [
      {
        "_index" : "test-auditing-2019-10",
        "_type" : "_doc",
        "_id" : "RELIIG4Bw-26hPm9WyUP",
...

怎么了?这是预期的吗?非常感谢。

标签: elasticsearch

解决方案


ElasticSearch 2.3 太旧了,也许它会返回所有匹配的文档。我没有这个版本,无法复制。

但是,现代 ElasticSearch 默认只返回 10 个匹配的文档,即使您的查询匹配所有文档。为了获得更多匹配的文档,可以使用fromandsize进行分页:

获取前 32 个文档:

http://localhost:9200/test-auditing-2019-10/_search?from=0&size=32&pretty=true

获取接下来的 32 个文档:

http://localhost:9200/test-auditing-2019-10/_search?from=32&size=32&pretty=true

推荐阅读