showliuzp 2025-09-17 22:34 采纳率: 84.3%
浏览 2
已结题

golang组合条件查询

   //聊天记录结构
    type chat_list struct {
        Createat    int    `json:"create_at"`
        ToUid       int    `json:"to_uid"`
        Uid         int    `json:"uid"`
        Content     string `json:"content"`
    }

    skip := (req.Page - 1) * req.PageSize

    boolQuery := elastic.NewBoolQuery()

    subQuery1 := elastic.NewBoolQuery().
    Must(elastic.NewTermQuery("to_uid", req.StreamerId)).
    Must(elastic.NewTermQuery("uid", req.MemberId))

    subQuery2 := elastic.NewBoolQuery().
    Must(elastic.NewTermQuery("to_uid", req.MemberId)).
    Must(elastic.NewTermQuery("uid", req.StreamerId))
    boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch(1)

我组合了两个条件查询,两组直接是or的关系,我把boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch(1)赋值给boolQuery 后,报错:
cannot use 1 (untyped int constant) as string value in argument to boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch
  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-09-17 22:43
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    你遇到的错误是因为在使用 MinimumShouldMatch 方法时,参数类型不匹配。具体来说,MinimumShouldMatch 的参数应该是一个 字符串 或者一个 整数,但你传入的是一个 未指定类型的整数常量(即 1)。


    ✅ 错误原因分析:

    boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch(1)
    
    • MinimumShouldMatch 接受的是一个 stringint 类型。
    • 你直接写 1,而没有明确其类型,导致 Go 编译器报错。

    ✅ 正确的写法如下:

    方法一:使用整数类型

    boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch(1)
    

    或者显式地将 1 转换为 int 类型:

    boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch(int(1))
    

    方法二:使用字符串类型

    boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch("1")
    

    ✅ 完整修改后的代码如下:

    skip := (req.Page - 1) * req.PageSize
    
    boolQuery := elastic.NewBoolQuery()
    
    subQuery1 := elastic.NewBoolQuery().
        Must(elastic.NewTermQuery("to_uid", req.StreamerId)).
        Must(elastic.NewTermQuery("uid", req.MemberId))
    
    subQuery2 := elastic.NewBoolQuery().
        Must(elastic.NewTermQuery("to_uid", req.MemberId)).
        Must(elastic.NewTermQuery("uid", req.StreamerId))
    
    // 使用整数类型
    boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch(1)
    
    // 或者使用字符串类型
    // boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch("1")
    

    📌 总结

    | 问题 | 解决方案 | |------|----------| | 报错信息:cannot use 1 (untyped int constant) as string value | 明确传递 MinimumShouldMatch 的参数类型为 intstring | | 建议 | 在使用 Elasticsearch 的 MinimumShouldMatch 方法时,建议使用 int 类型,如 12,而不是字符串 |


    如有其他关于 Elasticsearch 查询逻辑的问题,欢迎继续提问!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月26日
  • 已采纳回答 9月18日
  • 创建了问题 9月17日