📜  在 elasticsearch 中显示所有文档 (1)

📅  最后修改于: 2023-12-03 15:23:08.625000             🧑  作者: Mango

在 Elasticsearch 中显示所有文档

Elasticsearch是一个开源的全文搜索引擎,可以存储、搜索和分析大量的非结构化或半结构化数据。要在 Elasticsearch 中显示所有文档,可以使用 Elasticsearch 的 API。

1. 查找所有文档

要查找所有文档,可以使用 Elasticsearch 的 _search API,设置参数 size0,这样就不会返回任何结果,只会返回文档数量。

GET /index/_search
{
  "size": 0
}

这将返回以下结果:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1000,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  }
}

其中 "total" 表示文档数量。

2. 获取所有文档

要获取所有文档,可以使用 Elasticsearch 的 _search API,设置参数 size 为一个非常大的数字,例如 10000

GET /index/_search
{
  "size": 10000
}

这将返回前 10000 个文档,如果需要获取更多的文档,可以使用参数 from

GET /index/_search
{
  "size": 10000,
  "from": 10000
}

这将返回文档从 1000120000,以此类推。

3. 使用滚动API获取所有文档

如果文档数量很多,一次获取可能会导致性能下降,可以使用 Elasticsearch 的滚动API,将获取到的文档缓存起来,然后分批读取。

POST /index/_search?scroll=1m
{
  "size": 1000,
  "query": {
    "match_all": {}
  }
}

这将返回前 1000 个文档,并生成一个 scroll_id,用于后续的查询。

{
  "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAAAgF5blBlZkNyZk5CaUY4aUhYQjJSamcAAAAAAAAAAAHheWVwZWZPVDlaZlJNbFJzUHNFMjRmcwAAAAAAAAB7HllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAZ3llcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAbXllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAbnllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAcnllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAeHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdXllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAcnllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAeHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdXllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc1BzRTE0ZnMAAAAAAAAEmR0NGVjY28yWWdDcmc1dTZYeVN0QQ==",
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10000,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [...]
  }
}

可以使用 scroll_id 获取后续的文档:

POST /_search/scroll
{
  "scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAAAgF5blBlZkNyZk5CaUY4aUhYQjJSamcAAAAAAAAAAAHheWVwZWZPVDlaZlJNbFJzRHNESHZTcXMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAZ3llcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAbXllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAbnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAcnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAeHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdXllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAcnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAeHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdXllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAA=\"",
  "scroll": "1m"
}

每次获取的文档数量和设置的 size 相同,默认情况下,scroll_id 的过期时间是 1m,也就是说必须在 1m 内使用 scroll_id 获取后续的文档,否则 scroll_id 将失效。

4. 结束搜索

要结束搜索并释放滚动上下文,可以使用 Elasticsearch 的 _clear_scroll API,指定 scroll_id

DELETE /_search/scroll?scroll_id=DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAAAgF5blBlZkNyZk5CaUY4aUhYQjJSamcAAAAAAAAAAAHheWVwZWZPVDlaZlJNbFJzRHNESHZTcXMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAZ3llcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAbXllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAbnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAcnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAeHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdXllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAd3llcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAVHllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAAdnllcGVmT1Q5WmZSTWxSc0RzRESHZTcXMAAAAAAAAEmR0NGVjY28yWWdDcmc1dTZYeVN0QQ=="

这将结束搜索并释放滚动上下文所使用的资源。

以上就是在 Elasticsearch 中显示所有文档的方法,可以根据实际需求选择相应的方法。