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

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 本文介绍了在项目开发中使用ZincSearch作为全文搜索引擎的优势,包括其轻量级、易于安装和使用、资源占用低等特点,以及如何在GoFly快速开发框架中集成和使用ZincSearch,提供了详细的开发文档和实例代码,帮助开发者高效地实现搜索功能。

前言

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

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引擎-ZincSearch是Elasticsearch的轻量级替代
  • 内置身份验证
  • 用于编程使用的简单 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"
)

image.gif

  • 调用方法

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

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

image.gif

使用时索引的添加、更新、删除、获取索引列表,文档数据的添加、更新、删除以及搜索使用直接到开发文档: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)
}

image.gif

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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
9月前
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
153 2
|
3月前
|
监控 Java API
1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!
SMS4J 是一款由国内技术团队打造的短信聚合框架,专为解决多短信服务商接入难题而生。它就像短信界的"瑞士军刀",目前已整合21家主流短信服务商,从阿里云、腾讯云到中国移动云MAS,开发者只需通过简单配置即可实现多平台无缝切换。
176 4
|
5月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
292 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
3月前
|
人工智能 自然语言处理 运维
让搜索引擎“更懂你”:AI × Elasticsearch MCP Server 开源实战
本文介绍基于Model Context Protocol (MCP)标准的Elasticsearch MCP Server,它为AI助手(如Claude、Cursor等)提供与Elasticsearch数据源交互的能力。文章涵盖MCP概念、Elasticsearch MCP Server的功能特性及实际应用场景,例如数据探索、开发辅助。通过自然语言处理,用户无需掌握复杂查询语法即可操作Elasticsearch,显著降低使用门槛并提升效率。项目开源地址:<https://github.com/awesimon/elasticsearch-mcp>,欢迎体验与反馈。
864 1
|
3月前
|
人工智能 程序员 测试技术
通义灵码与魔搭 Notebook 深度集成:在线编码开箱即用,开发效率倍增
通义灵码 2.0 AI 程序员 2025 年 1 月正式上线,目前已经服务百万开发者,成为国内开发者最受欢迎的智能编码助手。
|
5月前
|
人工智能 运维 自然语言处理
Elasticsearch AI Assistant 集成 DeepSeek,1分钟搭建智能运维助手
Elasticsearch 新支持 DeepSeek 系列模型,使用 AI 助手,通过自然语言交互,为可观测性分析、安全运维管理及数据智能处理提供一站式解决方案。
755 3
Elasticsearch AI Assistant 集成 DeepSeek,1分钟搭建智能运维助手
|
3月前
|
人工智能 IDE 测试技术
通义灵码与魔搭Notebook深度集成:在线编码开箱即用,开发效率倍增
通义灵码2.0 AI程序员于2025年1月上线,目前已支持超过百万开发者。该工具的智能编程能力现已与阿里云AI模型开发平台魔搭ModelScope实现技术集成
171 0
|
8月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
153 2
|
8月前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
214 2
|
8月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
116 1