//es存储的内容:

//es查询:
skip := (req.Page - 1) * req.PageSize
var query elastic.Query
if (*req).Operator != "" {
//query = elastic.NewBoolQuery().Filter(elastic.NewTermQuery("operator.keyword", (*req).Operator))
}
if (*req).StartDate != 0 && (*req).EndDate != 0 {
start_date := tools.FormatDates(types.DATE_NORMAL_FORMAT,(*req).StartDate)
end_date := tools.FormatDates(types.DATE_NORMAL_FORMAT,(*req).EndDate)
//都为yyyy-mm-dd h:i:格式的日期
query = elastic.NewRangeQuery("dates").Gte(start_date).Lte(end_date)
}
list_res, err := types.EsClient.Search().Index(types.ES_OPERATOR_INDEX).Query(query).Sort("dates.keyword",false).From(skip).Size((*req).PageSize).Pretty(true).Do(ctx)
fmt.Printf("完整数据:%+v,错误内容:%+v\n",list_res.TotalHits(),err)
//错误内容:
elastic: Error 400 (Bad Request): [range] query does not support [from] [type=parsing_exception]
golang es日期区间查询报错
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
问题:如何解决在Elasticsearch查询中出现的错误"Error 400 (Bad Request): [range] query does not support [from] [type=parsing_exception]"? 解答: 在Elasticsearch中,当在使用range查询时,如果尝试使用from参数(例如在分页时),就会导致错误"Error 400 (Bad Request): [range] query does not support [from] [type=parsing_exception]"。这是因为range查询不支持直接使用from参数,需要通过其他方式来实现分页查询。 解决方法是将from参数替换为search_after参数来实现分页查询。search_after参数允许指定在哪个文档之后开始返回结果,从而达到分页的效果。 以下是修改后的示例代码:skip := (req.Page - 1) * req.PageSize var query elastic.Query if (*req).Operator != "" { //query = elastic.NewBoolQuery().Filter(elastic.NewTermQuery("operator.keyword", (*req).Operator)) } if (*req).StartDate != 0 && (*req).EndDate != 0 { start_date := tools.FormatDates(types.DATE_NORMAL_FORMAT, (*req).StartDate) end_date := tools.FormatDates(types.DATE_NORMAL_FORMAT, (*req).EndDate) query = elastic.NewRangeQuery("dates").Gte(start_date).Lte(end_date) } list_res, err := types.EsClient.Search().Index(types.ES_OPERATOR_INDEX).Query(query).Sort("dates.keyword", false).Size((*req).PageSize).Pretty(true).Do(ctx) if err != nil { fmt.Printf("查询出错:%+v\n", err) } // 使用search_after参数来获取下一页数据 if list_res.HasNextPage() { searchAfter := list_res.LastHit().Sort new_res, err := types.EsClient.Search().Index(types.ES_OPERATOR_INDEX).Query(query).Sort("dates.keyword", false).SearchAfter(searchAfter).Size((*req).PageSize).Pretty(true).Do(ctx) if err != nil { fmt.Printf("查询下一页出错:%+v\n", err) } list_res = new_res } fmt.Printf("完整数据:%+v\n", list_res.TotalHits())通过上述代码示例,可以解决在Elasticsearch查询中出现的"Error 400 (Bad Request): [range] query does not support [from] [type=parsing_exception]"错误,并实现分页查询功能。
解决 无用评论 打赏 举报