Запрос ES от сервера golang к ES возвращает ошибку, в то время как запрос почтальона непосредственно к ES возвращает ожидаемые результаты - PullRequest
1 голос
/ 15 июня 2019

Это тело запроса, которое я для этой конечной точки использую Почтальоном 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
                }
            }
        }]
    }
}
}

На этот URL localhost: 9201 / rensedbda029ce2b / _search

И я получаю результаты https://gist.gith

Но когда я делаю тот же запрос от моего сервера к ES, я получаю сообщение об ошибке: «эластичный: ошибка 400 (неправильный запрос): ожидается [START_OBJECT], но найден [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, поэтому, пожалуйста, помогите.

ОБНОВЛЕНИЕ:

Это то, что я получил, когда зарегистрировал свой запрос, используя SetTraceLog

| ELASTICPOST /resp8ecf8427e/_search HTTP/1.1
| Host: 172.17.0.1:9201
| User-Agent: elastic/5.0.81 (linux-amd64)
| Transfer-Encoding: chunked
| Accept: application/json
| Content-Type: application/json
| Accept-Encoding: gzip
| 
| 7
| ["_id"]
| 0

Я не могу понять, что означают 7 и ["_id"]. Это мое тело запроса, которое получил ES?

1 Ответ

1 голос
/ 16 июня 2019

Спасибо за загрузку журналов, вы правы, что ["_id"] - это отправляемый запрос.Проблема в строке запроса, поскольку Source([]string{"_id"}) не устанавливает в поле источника значение ["_id"], как вы предполагали, а вместо этого:

Источник позволяет пользователю устанавливать тело запроса вручную, не используяструктуры и интерфейсы в Elastic.

https://godoc.org/github.com/olivere/elastic#SearchService.Source

Вы хотите использовать FetchSourceContext вместо:

res, err = r.esConn.Search(indexName).From(requestBody.MaxResponseTimestampCount).FetchSourceContext(elastic.NewFetchSourceContect(true). Include("_id")).Query(query).Size(requestBody.ResponsePageLength).Do(ctx)

https://godoc.org/github.com/olivere/elastic#SearchService.FetchSourceContext

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...