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

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 ""
}
http://www.xdnf.cn/news/2340.html

相关文章:

  • 【c++】AVL树模拟实现
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念
  • 深入详解人工智能数学基础—概率论-KL散度在变分自编码器(VAE)中的应用
  • 驯龙日记:用Pandas驾驭数据的野性
  • 《2025全球机器学习技术大会:阿里云讲师张玉明深度剖析通义灵码AI程序员》
  • prometheus手动添加k8s集群外的node-exporter监控
  • 国家与省市县 标准地图服务网站 审图号地图下载
  • 【Redis】zset类型
  • 本安型交换机 + TSN:煤矿智能化的关键拼图
  • 2025蓝桥杯省赛网络安全组wp
  • 无人机超声波避障技术要点与难点!
  • 火语言RPA--钉钉群通知
  • 【Web API系列】深入解析 Web Service Worker 中的 WindowClient 接口:原理、实践与进阶应用
  • LCD1602液晶显示屏详解(STM32)
  • Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
  • 纯净无噪,智见未来——MAGI-1本地部署教程,自回归重塑数据本质
  • Redis03-基础-C#客户端
  • Hyper-V安装Win10系统,报错“No operating system was loaded“
  • Java大厂面试突击:从Spring Boot自动配置到Kafka分区策略实战解析
  • Java详解LeetCode 热题 100(01):LeetCode 1. 两数之和(Two Sum)详解
  • UEC++第13天| 字体集、UEC中的 -> :: .
  • Linux操作系统从入门到实战(四)Linux基础指令(下)
  • 【嵌入式八股22】排序算法与哈希算法
  • 接口中直接获取HttpServletRequest打印日志
  • WinForm真入门(17)——NumericUpDown控件详解
  • 【JavaScript】关系运算符--非数值类型、Unicode编码表
  • BG开发者日志0427:故事的起点
  • android ams调试指令介绍
  • 【数据结构】·励志大厂版(复习+刷题):二叉树
  • 从零搭建云原生后端系统 —— 一次真实项目实践分享