为了账号安全,请及时绑定邮箱和手机立即绑定

从 golang 服务器到 ES 的 ES 查询返回错误,而 postman 直接向 ES

从 golang 服务器到 ES 的 ES 查询返回错误,而 postman 直接向 ES

Go
慕哥9229398 2023-06-26 15:45:51
这是我使用 Postman 为此端点的请求正文localhost:9201/response_v2_862875ee3a88a6d09c95bdbda029ce2b/_search{"_source": ["_id"],"from": 1,"size": 10,: {                                "should": {                                    "match": {            }        }, {            "range": {                "_updated_at": {                    "from": "36163",                    "include_lower": true,                    "include_upper": true,                    "to": null                }            }        }]    }}}到此网址 localhost:9201/rensedbda029ce2b/_search我得到了结果https://gist.gith但是当我从服务器向 ES 发出相同的请求时,我收到一条错误消息“elastic: Error 400 (Bad Request): Expected [START_OBJECT] but found [START_ARRAY] [type=parsing_exception]”这些是我的代码的一些片段。我从另一个 util 函数获取查询,并在调用 ES 时使用它。这是对ES的调用res, err = r.esConn.Search(indexName).e(requestBody.ResponsePageLength).Do(ctx)查询构建器函数是这样的,它接受从对我的服务器的请求正文中提取的参数,并基于该参数构建查询。func CreateMonitoringPipeline(maxResponseTime string, responseQueries []ResponseQuery, baselineFormId string) *elastic.BoolQuery {finalQuery := elastic.NewBoolQuery()    dateRangeMatchQuery := elastic.NewRangeQuery("_updated_at").        Gte(maxResponseTime)    finalQuery.Filter(dateRangeMatchQuery)}return finalQuery}我不明白为什么会发生这种情况?我的 ES 使用 ES 二进制文件运行,我的服务器在 docker 容器中运行。对 ES 和 golang 完全陌生,所以请帮忙。
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

["_id"]就是正在发送的请求。问题出在请求行中,因为Source([]string{"_id"})没有将源字段设置为["_id"]您想要的,而是:

Source 允许用户手动设置请求正文,而无需使用 Elastic 中的任何结构和接口。

你想改用FetchSourceContext

res, err = r.esConn.Search(indexName).From(requestBody.MaxResponseTimestampCount).FetchSourceContext(elastic.NewFetchSourceContect(true). Include("_id")).Query(query).Size(requestBody.ResponsePageLength).Do(ctx)
查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信