首页 > 其他分享 >GoFly快速开发框架集成ZincSearch全文搜索引擎-ZincSearch是ElasticSearch轻量级替代搜索引擎

GoFly快速开发框架集成ZincSearch全文搜索引擎-ZincSearch是ElasticSearch轻量级替代搜索引擎

时间:2024-10-19 17:16:42浏览次数:7  
标签:err ZincSearch param 搜索引擎 gf Regin 文档 轻量级

前言

我们在项目开发中会遇到如下业务场景:

1. 电子商务:实现商品搜索与推荐、价格监控。
2. 日志分析:进行系统日志分析和网络流量监控。
3. 社交媒体:内容搜索与发现以及用户行为分析。
4. 企业知识管理:进行知识搜索与共享和文档版本管理。
5. 新闻媒体:实现新闻搜索与推荐以及热点话题追踪。
6. 金融领域:进行金融资讯搜索和风险监控预警。
7. 医疗领域:病历管理与检索以及医学文献搜索研究。

我们需要从海量的数据中快速找到需要的内容,如果我们用Mysql等数据库来处理处理复杂条件查询的方式的话,因为只能通过一个索引进行过滤,所以需要进行大量的 I/O 操作来读取行数据,并消耗 CPU 进行内存过滤,导致查询性能的下降。而且mysql数据库没有像全文搜索引擎为我们集成好分词器、高亮搜索等功能,如果使用mysql数据库我们需要自己开发好分词器、高亮搜索等功能,费时不说还有性能问题也是很影响应用使用体验。所以我们在需要对文本内容搜索时,需要使用到搜索和分析引擎。

说到搜索引擎大家可能就想到Elasticsearch(简称ES),虽然 Elasticsearch 是一款出色的产品,但它很复杂,需要大量资源,并且已有十多年的历史,它包太大(约1G),他是Java开发的安装需要配置JVM运行环境。所以我们就不用他了,我们选用一个用Go语言开发的轻量级ZincSearch 全文索引的搜索引擎,与 Elasticsearch 相比,它操作起来很简单,Elasticsearch 需要几十个 knobs 来理解和调整,你可以在 2 分钟内启动并运行,ZincSearch安装和运行都是单个二进制文件,二进制文件适用于多个平台的发行版,不需配置运行环境,运行内存不到 100 MB 的 RAM 。并且ZincSearch开发一套兼容Elasticsearch 的API,方便Elasticsearch 迁移到 Zinc 的应用。

ZincSearch特点:

  • 无模式索引
  • 资源利用率低
  • 用于查询用 Vue 编写的数据的 Web UI
  • 内置身份验证
  • 用于编程使用的简单 API
  • 与希望从 Elasticsearch 迁移到 Zinc 的应用程序兼容的 Elasticsearch API(单条记录和批量 API)。

ZincSearch使用文档

ZincSearch官方文档只有英文版,英文文档地址:https://zincsearch-docs.zinc.dev ,为了方便我们使用,GoFly社区把它翻译成中文并对使用相关内容进行补全,也是让大家能有个全面使用参考文档,帮助大家开发效率,这是我们翻译及gofly框架集成完善的文档:ZincSearch中文开发文档开发文档中我们对官方翻译同时结合开发实战得出经验结果对文档内容修改补全,并把实战示例代码也附到文档中,因此ZincSearch中文开发文档 可以更好指导开发。

GoFly框架对ZincSearch集成

如果你是在使用我们的GoFly快速开发框架,你可以更加简单 容易的使用ZincSearch了,我们把它封装成一个组件包,可以像使用ORM链式操作mysql一样使用ZincSearch,统一了代码风格可以提高开发效率和降低维护成本。

快速使用ZincSearch插件

在你安装好gofly快速开发框架后登录到管理后台,到开发者工具->代码仓,找到“Zinc全文搜索引擎”代码包进行安装,安装好后到数据中心->配置管理 找到ZincSearch配置项,把ZincSearch的账号、密码、访问路径配置好就可以使用了。

gofly框架在业务开发位置调用很简单,在import中引入gofly/utils/plugin扩展。

  • 在使用的位置引入插件

引入代码如下:

import (
  "gofly/utils/plugin"
)
  • 调用方法

 调用代码格式:plugin.ZincSearch().xx().方法(),例如: 

res, err := plugin.ZincSearch().Index().Insert("indexname", "fields")

使用时索引的添加、更新、删除、获取索引列表,文档数据的添加、更新、删除以及搜索使用直接到开发文档:GoFly框架使用ZincSearch文档说明 文档写的很详细,开发是复制示例代码过来改参数即可。

实例代码

把我们测试用的示例代码ZincSearch.go完整代码提供给大家做个参考,GoFly框架使用完整代码如下:

package createcode

import (
	"gofly/utils/gf"
	"gofly/utils/plugin"
)

// 测试ZincSearch全文搜索引擎接口
type ZincSearch struct{}

func init() {
	fpath := ZincSearch{}
	gf.Register(&fpath, fpath)
}

// 添加索引
func (api *ZincSearch) AddIndex(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res, err := plugin.ZincSearch().Index().Insert(gf.String(param["name"]), param["fields"])
	if err != nil {
		gf.Failed().SetMsg("添加索引失败").SetData(err).Regin(c)
		return
	}
	gf.Success().SetMsg("添加索引成功").SetData(res).Regin(c)
}

// 获取索引
func (api *ZincSearch) GetList(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	list, err := plugin.ZincSearch().Index().Page(1, 10).FindName(gf.String(param["name"])).List()
	if err != nil {
		gf.Failed().SetMsg("添加索引失败").SetData(err).Regin(c)
		return
	}
	gf.Success().SetMsg("添加索引成功").SetData(list).Regin(c)
}

// 添加文档数据
func (api *ZincSearch) AddDoc(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res, err := plugin.ZincSearch().Doc().Insert(gf.String(param["name"]), param["data"])
	if err != nil {
		gf.Failed().SetMsg(err.Error()).Regin(c)
		return
	}
	gf.Success().SetMsg("添加文档数据成功").SetData(res).Regin(c)
}

// 更新文档数据
func (api *ZincSearch) UpdateDoc(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res, err := plugin.ZincSearch().Doc().Update(gf.String(param["name"]), param["id"], param["data"])
	if err != nil {
		gf.Failed().SetMsg(err.Error()).Regin(c)
		return
	}
	gf.Success().SetMsg("更新文档数据成功").SetData(res).Regin(c)
}

// 删除文档数据
func (api *ZincSearch) DelDoc(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res, err := plugin.ZincSearch().Doc().Del(gf.String(param["name"]), param["id"])
	if err != nil {
		gf.Failed().SetMsg(err.Error()).Regin(c)
		return
	}
	gf.Success().SetMsg("删除文档数据成功").SetData(res).Regin(c)
}

// 测试api搜索
func (api *ZincSearch) ApiSearch(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res, err := plugin.ZincSearch().Search().SetForm(0).SetSize(20).Highligh(gf.String(param["seachword"]), "title", "web")
	if err != nil {
		gf.Failed().SetMsg("测试api搜索失败").SetData(err).Regin(c)
		return
	}
	gf.Success().SetMsg("测试api搜索成功").SetData(res).Regin(c)
}

// 测试es搜索
func (api *ZincSearch) EsSearch(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res, err := plugin.ZincSearch().EsSearch().SetSize(3).SetFields("title,content").Base(gf.String(param["seachword"]), "title,content", "web")
	if err != nil {
		gf.Failed().SetMsg("测试es搜索失败").SetData(err).Regin(c)
		return
	}
	gf.Success().SetMsg("测试es搜索成功").SetData(res).Regin(c)
}

// 测试http请求
func (api *ZincSearch) HttpZinc(c *gf.GinCtx) {
	data := `{
			"from": 0,
			"size": 10,
			"query":{
				"multi_match":{
					"query":"复仇者",
					"fields":["title","content"]
				}
			},
			"highlight": {
				"fields": {
					"title":{},
					"content":{}
				}
			}
		}`
	res, _ := gf.RequestHttp("POST", "http://localhost:4080/es/web/_search", data, gf.MapStrStr{"Content-Type": "application/json", "Authorization": "Basic YWRtaW46MTIzNDU2"})
	gf.Success().SetMsg("测试http请求").SetData(res).Regin(c)
}

如果你用的ZincSearch,但没有安装GoFly开始开发框架后台,那么你先到:GoFly全栈开发社区 下载安装框架,安装使用GoFly快速开发框架请参考框架对应文档,文档就在框架介绍那里,直接点击进出查看。好了ZincSearch搜索引擎使用就介绍到这里。

标签:err,ZincSearch,param,搜索引擎,gf,Regin,文档,轻量级
From: https://blog.csdn.net/qq_23731311/article/details/143022191

相关文章

  • 信息收集-IP查询和利用搜索引擎收集
    IP查询IP地址定位:高精度IP定位4-openGPS.cn利用搜索引擎搜集信息建议用bing搜索语法:关键词:关键内容索引描述inurl:搜索包含指定url的网页intitle:限制搜索的网页标题intext:只搜索网页部分包含的文字(忽略标题、url)site:限制搜索想要的域名filetyp......
  • 基于YOLOv8的高精度火车轨道路障检测算法源码源码 + 数据集,数据集共2053张图片,有5个类
     基于YOLOv8的高精度火车轨道路障检测算法源码源码+数据集,数据集共2053张图片,有5个类别,分别是preson、obstic_oc、animal、vehicle、motor_bicycle实时检测:采用YOLOv8m算法,轻量级架构,可以实时识别轨道上的障碍物。高精度识别:精准识别多种路障,包括人、动物、车辆、摩托车。......
  • 基于 Python + Vue3!一个轻量级的域名和 SSL 证书监测平台!
    大家好,我是Java陈序员。在企业开发中,由于业务众多,涉及到很多业务域名证书,证书过期由于遗忘常常未能及时续期,导致线上访问异常,给企业带来损失!今天,给大家介绍一个轻量级的域名和SSL证书监测平台,用来解决证书管理困难的问题!关注微信公众号:【Java陈序员】,获取开源项目分享、AI......
  • TNN: 腾讯优图实验室和光影实验室开发的高性能、轻量级深度学习推理框架
    TNN简介TNN是由腾讯优图实验室和光影实验室联合开发的一款高性能、轻量级的深度学习推理框架。它在ncnn和Rapidnet的基础上,进一步加强了对移动设备的支持和性能优化,同时借鉴了业界主流开源框架的优点,具有良好的可扩展性和高性能。TNN已在腾讯多个应用中得到广泛应用,如手机QQ......
  • 使用博查Web Search API获取搜索引擎的网页链接和文本摘要,给AI/RAG应用增加联网搜索功
    为什么需要WebSearchAPI?各类AINative应用、RAG应用、AIAgent智能体在开发过程都会遇到联网获取互联网网页信息的需求,此时需要得到原始网页链接以及文本摘要,以用于给pipeline中的大模型作为上下文总结使用。但目前仅国外的搜索引擎例如Bing、Google提供此类WebSearch......
  • 【Java 22 | 3】 深入解析Java 22 :轻量级线程
    Java22轻量级线程特性详细介绍基础介绍轻量级线程(VirtualThreads)是Java平台在Java19中引入的特性,目的是简化并发编程并提高应用程序的可伸缩性。在Java22中,轻量级线程得到了进一步的完善,使得开发者能够更方便地创建和管理大量并发任务。轻量级线程的特点高......
  • 外链建设对搜索引擎优化的作用
    在搜索引擎优化(SEO)中,外链建设是一个重要的环节。外链,也称为反向链接,是指其他网站链接到你的网站。本文将探讨外链建设对搜索引擎优化的作用,以及如何有效地进行外链建设。1.提高网站权威性高质量的外链可以提高你网站的权威性。当权威网站链接到你的网站时,搜索引擎会认为你的......
  • zinx-Golang轻量级TCP服务器框架学习记录
    目录背景介绍学习资料源代码背景介绍由于工作需要,需要开发高并发的golang服务器。作为一个golang小白,选择一个好的框架既是对项目的负责,也是一个学习的过程。之所以选择Zinx框架,是因为其完整的文档和视频讲解,这对一个初学者来说是非常友好的学习资料Golang轻量级并发服务......
  • Index-1.9B: 哔哩哔哩自主研发的轻量级多语言大模型
    Index-1.9B模型简介Index-1.9B是哔哩哔哩自主研发的一款轻量级多语言大模型系列,包含以下几个版本:Index-1.9Bbase:基础模型,具有19亿非嵌入参数,在2.8T主要为中英文的语料上进行预训练,在多项评测基准上领先同级别模型。Index-1.9Bpure:基础模型的对照版本,参数和训练策略......
  • AOT漫谈专题(第二篇): 如何对C# AOT轻量级APM监控
    一:背景1.讲故事上一篇我们聊到了如何调试.NETNativeAOT程序,这是研究一个未知领域知识的入口,这篇我们再来看下如何对NativeAOT程序进行轻量级的APM监控,当然这里的轻量级更多的是对AOT中的coreclr内容的挖掘。二:如何轻量级APM监控1.一个简单的例子用一个不断的往内存......