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

这是我使用 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 完全陌生,所以请帮忙。


慕哥9229398
浏览 120回答 1
1回答

慕妹3146593

这["_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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go