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.mzph.cn/bicheng/78714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LangChain构建大模型应用之RAG

RAG(Retrieval-augmented Generation 检索增强生成)是一种结合信息检索与生成模型的技术,通过动态整合外部知识库提升大模型输出的准确性和时效性。其核心思想是在生成答案前,先检索外部知识库中的相关信息作为上下文依据,从而突破传统生成模型的静态知识边界。 为什么我们…

Ubuntu 下 Nginx 1.28.0 源码编译安装与 systemd 管理全流程指南

一、环境与依赖准备 为确保编译顺利,我们首先更新系统并安装必要的编译工具和库: sudo apt update sudo apt install -y build-essential \libpcre3 libpcre3-dev \zlib1g zlib1g-dev \libssl-dev \wgetbuild-essential:提供 gcc、make 等基…

第十二章-PHP文件上传

第十二章-PHP文件上传 一,文件上传原理 一、HTTP协议与文件上传 1. 请求体结构 当表单设置enctype"multipart/form-data"时,浏览器会将表单数据编码为多部分(multipart)格式。 Boundary分隔符:随机生成的…

CSS元素动画篇:基于当前位置的变换动画(三)

基于当前位置的变换动画(三) 前言缩放效果类元素动画脉冲动画效果效果预览代码实现 橡皮筋动画效果效果预览代码实现 果冻动画效果效果预览代码实现 欢呼动画效果效果预览代码实现 心跳动画效果效果预览代码实现 结语 前言 CSS元素动画一般分为两种&…

Redis ssd是什么?Redis 内存空间优化的点都有哪些?embstr 和 row、intset、ziplist分别是什么?

Redis SSD 是什么? Redis SSD 通常指 Redis 使用 SSD(固态硬盘)作为持久化存储介质的场景。虽然 Redis 是内存数据库(数据主要驻留内存),但其持久化机制(如 RDB 快照和 AOF 日志)需…

【蓝桥杯】 数字诗意

数字诗意 在诗人的眼中,数字是生活的韵律,也是诗意的表达。 小蓝,当代顶级诗人与数学家,被赋予了”数学诗人”的美誉。他擅长将冰冷的数字与抽象的诗意相融合,并用优雅的文字将数学之美展现于纸上。 某日&#xff0…

DHCP 服务器运行流程图

以常见的 DHCP v4 为例,其完整流程如下: 一、客户端请求 IP 地址阶段 DHCPDiscover:客户端启动后,会以广播的形式发送 DHCPDiscover 报文,目的是在网络中寻找可用的 DHCP 服务器。该报文中包含客户端的 MAC 地址等信息,以便服务器能够识别客户端。DHCPOffer:网络中的 D…

一种企业信息查询系统设计和实现:xujian.tech/cs

一种企业信息查询系统设计和实现:xujian.tech/cs 背景与定位 企业在对外合作、风控审查或市场调研时,常需快速获取公开的工商信息。本文介绍一个企业信息搜索引擎,面向普通用户与开发者,帮助快速定位企业名称、统一社会信用代码…

前端面试高频算法

前端面试高频算法 1 排序算法;1.1 如何分析一个排序算法1.1.1 执行效率3.1.2 内存消耗1.1.3 稳定性 1.2 冒泡排序(Bubble Sort)1.3 插入排序(Insertion Sort)1.4 选择排序(Selection Sort)1.5 归…

C++初阶-模板初阶

目录 1.泛型编程 2.函数模板 2.1函数模板概念 2.2实现函数模板 2.3模板的原理 2.4函数模板的实例化 2.4.1隐式实例化 2.4.2显式初始化 2.5模板参数的匹配原则 3.类模板 3.1类模板定义格式 3.2类模板的实例化 4.总结 1.泛型编程 对广泛的类型法写代码,我…

「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI

一、概述 本篇介绍如何在 macOS 环境下本地部署 Ollama 推理服务,并通过 Open WebUI 实现可视化交互界面。该流程无需 CUDA 或专用驱动,适用于 M 系列或 Intel 芯片的 Mac,便于快速测试本地大语言模型能力。 二、部署流程 1. 环境准备 安装 Homebrew(如尚未安装):/bin…

JavaScript 中 undefined 和 not defined 的区别

在 JavaScript 的调试过程中,你是否经常看到 undefined 却不知其来源?是否曾被 ReferenceError: xxx is not defined 的错误提示困扰?这两个看似相似的概念,实际上是 JavaScript 类型系统中最重要的分水岭。本文将带你拨开迷雾&am…

django admin AttributeError: ‘UserResorce‘ object has no attribute ‘ID‘

在 Django 中遇到 AttributeError: ‘UserResource’ object has no attribute ‘ID’ 这类错误通常是因为你在代码中尝试访问一个不存在的属性。在你的例子中,错误提示表明 UserResource 类中没有名为 ID 的属性。这可能是由以下几个原因造成的: 拼写错…

对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡

对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡 在科技飞速发展的当下,鸿蒙 Next 系统无疑成为了众多科技爱好者与行业人士关注的焦点。今日,卓伊凡便收到这样一个饶有趣味的问题:鸿蒙 Next 系统究竟需要多长时间才能完全成熟&#xff…

快速上手GO的net/http包,个人学习笔记

更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …

AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok的客户端开源应用程序,集成了 Monaco 编辑器。

一、软件介绍 文末提供程序和源码下载学习 AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok、Felo、Cody、JENOVA、Phind、Perplexity、Genspark 和 Google AI Studio 的客户端应用程序,集成了 Monaco 编辑器。使用 Electron 构建的强大桌面应用程序&a…

Dify框架面试内容整理-Dify如何处理知识库的集成?

Dify 在知识库集成方面采用了“检索增强生成(RAG)”的技术架构,核心实现思路如下: 一、知识库集成的整体流程 Dify处理知识库集成通常包括以下关键步骤: 文档上传↓

Laravel 模型使用全局作用域和局部作用域

一. 需要解决什么问题 最近Laravel 项目中遇到一个需求,我有一个客户表,每个员工都有自己的客户,但是自己只能看自己的客户。 项目中,有很多功能需要查询客户列表,客户详情,查询客户入口很多,…

【Nova UI】十二、打造组件库之按钮组件(上):迈向功能构建的关键一步

序言 在上一篇文章中,我们深入探索了 icon 组件从测试到全局注册的全过程🎯,成功为其在项目中稳定运行筑牢了根基。此刻,组件库的建设之旅仍在继续,我们将目光聚焦于另一个关键组件 —— 按钮组件。按钮作为用户与界面…

鸿蒙OSS文件(视频/图片)压缩上传组件-能够增删改查

一、鸿蒙实现处理-压缩上传整体代码处理逻辑 转沙箱压缩获取凭证并上传文件 文件准备(拿到文件流)获取上传凭证(调接口1拿到file_name和upload_url)执行文件上传(向阶段2拿到的upload_url上传文件)更新列表…