使用aws-es-curl调用AWS Elasticsearch时参数不生效,如何正确配置?
问题原因&解决方案
这个问题我之前在使用ES 5.x版本时也碰到过,核心是你的请求体里存在不符合_search API规范的内容,导致ES无法正确解析你传递的参数:
多余的
index字段干扰了请求解析
你已经在URL路径里明确指定了目标索引my-index(https://myhost.es.amazonaws.com/my-index/_search),但又在请求体里加了"index":"my-index"——_searchAPI的请求体并不接受这个参数,这个无效字段会让ES忽略后续的size和_source配置,直接返回默认结果(默认size为10,且返回所有字段)。参数位置需符合API规范
size和_source都属于_search请求的顶层参数,只要移除无效的index字段,它们就能被正确识别。
正确的请求命令
你可以用以下两种方式修改请求,任选其一即可:
方式一:请求体中包含所有参数
aws-es-curl https://myhost.es.amazonaws.com/my-index/_search?pretty -H 'Content-Type: application/json' -d'{ "query": {"match_all": {}}, "size": 100, "_source": { "excludes": ["attachment.*", "data"], "includes": "owner" } }'
方式二:将size作为URL参数传递
这种方式可以避免请求体里的参数层级问题,有时候更不易出错:
aws-es-curl "https://myhost.es.amazonaws.com/my-index/_search?pretty&size=100" -H 'Content-Type: application/json' -d'{ "query": {"match_all": {}}, "_source": { "excludes": ["attachment.*", "data"], "includes": "owner" } }'
额外提示
- ES 5.3完全支持你写的
_source筛选语法,includes可以是单个字符串,excludes支持通配符匹配,这部分是没问题的。 - 用bash执行命令时,记得用单引号包裹JSON内容,避免bash解析里面的特殊字符(你的原命令这部分是正确的)。
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

