问题描述

现网indices有数据,如下,GET /_cat/indices得到的结果里,待查索引显示有数据472033条,但是Postman 发查询语句GET /_search match_all,查不出数据;GET /_count也是0。索引状态也是open,而不是close。

health status index                               uuid                   pri rep docs.count 
green	open	demo-2014.02	vQHoFKSnQ1qmsmVZQzULQA	5	1	472033

原因分析与解决方案:

先看下索引情况,GET /demo-2014.02/_settings?pretty

{
    "demo-2014.02": {
        "settings": {
            "index": {
                "refresh_interval": "60s",
                "translog": {
                    "flush_threshold_size": "512mb",
                    "sync_interval": "60s",
                    "durability": "async"
                },
                "blocks": {
                    "write": "true"
                },
                "provided_name": "demo-2014.02",
                "max_result_window": "10000",
                "frozen": "true",
                "creation_date": "1645531791718",
                "analysis": {
                    "analyzer": {
                        "ik": {
                            "tokenizer": "ik_max_word"
                        }
                    }
                },
                "number_of_replicas": "1",
                "uuid": "I3GBkdQqS0eKBV4DfGBgbQ",
                "version": {
                    "created": "7090299"
                },
                "search": {
                    "throttled": "true"
                },
                "number_of_shards": "5"
            }
        }
    }
}

注意到其中索引被标记为"frozen":"true",在 Elasticsearch 中这个标记会影响搜索操作。冻结索引是Elasticsearch提供的一种节省资源的功能,它允许几乎不占用内存的情况下保留索引。然而,冻结索引会对其的搜索和访问产生重要影响。

  1. 搜索限制:

冻结索引在默认情况下不可被普通的搜索查询访问,这意味着标准_search请求不会返回冻结索引中的结果,所以Postman发普通的_search查询无返回结果。

  1. 解冻索引:

如果要在冻结索引中进行搜索,需要先将其解冻。这可以通过以下命令完成:POST /demo-2014.02/_unfreeze,解冻索引后,就可以正常搜索该索引中的数据。

  1. 性能考虑:

解冻索引可能会消耗更多的资源,因为它需要将索引数据加载到内存中。

  1. 使用冻结索引搜索:

Elasticsearch 也支持直接在冻结索引上执行搜索,但这通常比在未冻结的索引上搜索要慢得多。在查询时使用ignore_throttled=false参数就可以了,使用以下命令:GET /demo-2014.02/_search?ignore_throttled= false { "query" : { "match_all" : { } } }

01-22 19:06