问题描述
现网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提供的一种节省资源的功能,它允许几乎不占用内存的情况下保留索引。然而,冻结索引会对其的搜索和访问产生重要影响。
- 搜索限制:
冻结索引在默认情况下不可被普通的搜索查询访问,这意味着标准_search请求不会返回冻结索引中的结果,所以Postman发普通的_search查询无返回结果。
- 解冻索引:
如果要在冻结索引中进行搜索,需要先将其解冻。这可以通过以下命令完成:POST /demo-2014.02/_unfreeze
,解冻索引后,就可以正常搜索该索引中的数据。
- 性能考虑:
解冻索引可能会消耗更多的资源,因为它需要将索引数据加载到内存中。
- 使用冻结索引搜索:
Elasticsearch 也支持直接在冻结索引上执行搜索,但这通常比在未冻结的索引上搜索要慢得多。在查询时使用ignore_throttled=false参数就可以了,使用以下命令:GET /demo-2014.02/_search?ignore_throttled= false { "query" : { "match_all" : { } } }