当前位置: 首页 > news >正文

Golang | 搜索表达式

// (( A | B | C ) & D ) | E & (( F | G ) & H )

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import "strings"// 实例化一个搜索表达式
func NewTermQuery(field, keyword string) *TermQuery {return &TermQuery{Keyword: &Keyword{Field: field, Word: keyword},}
}func (tq *TermQuery) Empty() bool {return tq.Keyword == nil && len(tq.Must) == 0 && len(tq.Should) == 0
}func (tq *TermQuery) And(queries ...*TermQuery) *TermQuery {if len(queries) == 0 {return tq}array := make([]*TermQuery, 0, len(queries)+1)if !tq.Empty() {array = append(array, tq)}for _, ele := range queries {if !ele.Empty() {array = append(array, ele)}}if len(array) == 0 {return tq}return &TermQuery{Must: array}
}func (tq *TermQuery) Or(queries ...*TermQuery) *TermQuery {if len(queries) == 0 {return tq}array := make([]*TermQuery, 0, 1+len(queries))if !tq.Empty() {array = append(array, tq)}for _, ele := range queries {if !ele.Empty() {array = append(array, ele)}}if len(array) == 0 {return tq}return &TermQuery{Should: array}
}func (tq *TermQuery) Tostring() string {switch {case tq.Keyword != nil:return tq.Keyword.ToString()case len(tq.Must) > 0:if len(tq.Must) == 1 {return tq.Must[0].Tostring()}sb := strings.Builder{}sb.WriteString("(")for _, ele := range tq.Must {s := ele.Tostring()if len(s) > 0 {sb.WriteString(s)sb.WriteString("&")}}s := sb.String()s = s[0:len(s)-1] + ")"return scase len(tq.Should) > 0:if len(tq.Should) == 1 {return tq.Should[0].Tostring()}sb := strings.Builder{}sb.WriteByte('(')for _, ele := range tq.Should {s := ele.Tostring()if len(s) > 0 {sb.WriteString(s)sb.WriteByte('|')}}s := sb.String()s = s[0:len(s)-1] + ")"return s}return ""
}
package typesimport ("strings"
)func NewTermQuery(field, keyword string) *TermQuery {//TermQuery的一级成员里只有 Field-keyword非空,Must和Should都为空return &TermQuery{Keyword: &Keyword{Field: field, Word: keyword}}
}func (tq TermQuery) Empty() bool {return tq.Keyword == nil && len(tq.Must) == 0 && len(tq.Should) == 0
}// Builder模式
func (tq *TermQuery) And(querys ...*TermQuery) *TermQuery {if len(querys) == 0 {return tq}array := make([]*TermQuery, 0, len(querys)+1)if !tq.Empty() {array = append(array, tq)}for _, query := range querys {if !query.Empty() {array = append(array, query)}}return &TermQuery{Must: array}
}func (tq *TermQuery) Or(querys ...*TermQuery) *TermQuery {if len(querys) == 0 {return tq}array := make([]*TermQuery, 0, len(querys)+1)if !tq.Empty() {array = append(array, tq)}for _, query := range querys {if !query.Empty() {array = append(array, query)}}return &TermQuery{Should: array}
}func (tq TermQuery) ToString() string {if tq.Keyword != nil {return tq.Keyword.ToString()} else if len(tq.Must) > 0 {if len(tq.Must) == 1 {return tq.Must[0].ToString()} else {sb := strings.Builder{}sb.WriteByte('(')for _, e := range tq.Must {s := e.ToString()if len(s) > 0 {sb.WriteString(s)sb.WriteByte('&')}}s := sb.String()s = s[0:len(s)-1] + ")"return s}} else if len(tq.Should) > 0 {if len(tq.Should) == 1 {return tq.Should[0].ToString()} else {sb := strings.Builder{}sb.WriteByte('(')for _, e := range tq.Should {s := e.ToString()if len(s) > 0 {sb.WriteString(s)sb.WriteByte('|')}}s := sb.String()s = s[0:len(s)-1] + ")"return s}}return ""
}

相关文章:

  • 巧记英语四级单词 Unit6-上【晓艳老师版】
  • Dijkstra 算法代码步骤[leetcode.743网络延迟时间]
  • Milvus如何实现关键词过滤和向量检索的混合检索
  • 信竞中的数学(一):质数
  • 典籍查询界面增加我的收藏查询功能
  • 极狐GitLab 议题权重有什么作用?
  • 【漫话机器学习系列】227.信息检索与数据挖掘中的常用加权技术(TF-IDF)
  • 论文检索相关网站
  • 制作一款打飞机游戏26:精灵编辑器
  • 【2025 最新前沿 MCP 教程 05】为 MCP 设置开发环境
  • 《AI大模型应知应会100篇》第37篇:Agent框架入门:让AI具备自主行动能力
  • 非结构化数据解析
  • ESP32开发入门(四):ESP32-s3多串口开发实践
  • Linux进程详细解析
  • Day14(链表)——LeetCode234.回文链表141.环形链表
  • MySQL:13.用户管理
  • 【漫话机器学习系列】226.测试集、训练集、验证集(test,training,validation sets)
  • 天线设计实战:三大经典布局的摆放逻辑与核心技术要点!
  • el-input限制输入只能是数字 限制input只能输入数字
  • 力扣hot100,739每日温度(单调栈)详解
  • 马上评|“AI神医宇宙”欺诈,连演员都不请了
  • 民航局答澎湃:督促各单位进一步完善航班大面积延误和大面积备降应急处置预案
  • 泽连斯基与特朗普进行简短会谈
  • 中方在IMF发声:美滥施关税威胁全球金融稳定,对新兴市场和发展中国家构成严峻挑战
  • 文庙印象:一周城市生活
  • “归雁经济”能带来什么?川大商学院调研团队深入乡村与返乡青年人才交流