Elasticsearch 8.11.3查询无hits段原因排查求助
为什么Elasticsearch查询响应没有
hits段? 环境与问题描述
使用Elasticsearch 8.11.3,索引包含以下字段:
Период: 日期时间类型,示例值2023-12-12T21:23:37ZБазовыйURL: 字符串类型,示例值api.site.ru:443
执行以下POST请求后,响应中没有预期的hits段:
错误的请求
POST myindex-alias/_doc/_search?pretty {"from":0,"size":200,"query":{"bool":{"must":[{"range":{"Период":{"time_zone":"+07:00","gte":"2023-12-01T00:00:00","lte":"2023-12-21T23:59:59"}}}]}},"sort":{"Период":{"order":"asc"}}}
错误请求的响应
{ "_index": "myindex-alias", "_id": "_search", "_version": 27, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 81326, "_primary_term": 1 }
而执行以下GET请求时,能正常返回包含hits的搜索结果:
正确的请求
GET myindex-alias/_search?from=0&size=10
正确请求的响应
{ "took": 9, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 10000, "relation": "gte" }, "max_score": 1, "hits": [ { "_index": "model_erp_log_exchange_ozon-000001", "_id": "d7c428c4-243c-40d4-8019-eb48fa1ec8e2", "_score": 1, "_source": { "Период": "2023-12-12T21:23:37Z", "БазовыйURL": "api-seller.ozon.ru:443" ... ] } }
问题原因
错误出在请求路径上:你使用了POST myindex-alias/_doc/_search,这个路径会被Elasticsearch识别为对索引中_id为_search的文档执行更新/插入(upsert)操作,而非搜索操作。因此返回的是文档写入的响应,自然不会包含hits段。
解决方法
正确的搜索请求路径应该去掉中间的/_doc:
- 使用POST方式:
POST myindex-alias/_search?pretty - 或者使用GET方式:
GET myindex-alias/_search?pretty
将请求路径修正后,即可正常获取包含hits的搜索结果。
内容的提问来源于stack exchange,提问作者Игорь В
相关产品推荐
相关产品推荐

