//聊天记录结构
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
golang组合条件查询
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
檀越@新空间 2025-09-17 22:43关注晚上好🌙🌙🌙
本答案参考通义千问你遇到的错误是因为在使用
MinimumShouldMatch方法时,参数类型不匹配。具体来说,MinimumShouldMatch的参数应该是一个 字符串 或者一个 整数,但你传入的是一个 未指定类型的整数常量(即1)。
✅ 错误原因分析:
boolQuery = boolQuery.Should(subQuery1, subQuery2).MinimumShouldMatch(1)MinimumShouldMatch接受的是一个 string 或 int 类型。- 你直接写
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的参数类型为int或string| | 建议 | 在使用 Elasticsearch 的MinimumShouldMatch方法时,建议使用int类型,如1或2,而不是字符串 |
如有其他关于 Elasticsearch 查询逻辑的问题,欢迎继续提问!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报