showliuzp 2025-10-14 18:52 采纳率: 84.3%
浏览 3
已结题

golang es日期区间查询报错


//es存储的内容:

![img](https://i-blog.csdnimg.cn/ask/2a17fb2bc5e448299185dfda12d99d65.png "#left")



//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]
  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2025-10-14 18:52
    关注
    让阿豪来帮你解答,本回答参考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]"错误,并实现分页查询功能。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月14日
  • 创建了问题 10月14日