模糊搜索

要达到的目标是用户不需要关心搜索系统的结构,任意输入一串字符或者数字,只要搜索范围中包含该信息,通过该方法就能够找出该信息包含在哪个表,哪个字段里,或者具体哪个位置,进而可以进行更为详细的查询。

系统允许被搜索信息和搜索提问之间存在一定的差异,这种差异就是“模糊”在搜索中的含义。例如,查找名字Smith时,就会找出与之相似的Smithe, Smythe, Smyth, Smitt等。

需求

业务要求用户输入Query为“手机”时,返回所有包含“手机”关键词的在线词。

这里面我们介绍一下go语言的“Fuzzy Search”模糊匹配库的用法,该库灵活的对字符串进行配置,有助于轻量级用户快速过滤数据。

项目地址:https://github.com/lithammer/fuzzysearch

安装golang.org/x

mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/xgit clone https://github.com/golang/sys.git
git clone https://github.com/golang/net.git
git clone https://github.com/golang/text.git
git clone https://github.com/golang/lint.git
git clone https://github.com/golang/tools.git
git clone https://github.com/golang/crypto.git

go.mod

module fuzzySearchgo 1.13require (golang.org/x/text v0.3.2github.com/renstrom/fuzzysearch v1.1.0
)

编码例子

package mainimport ("fmt""github.com/lithammer/fuzzysearch/fuzzy""sort"
)func main() {var onlineAdverts = []string{"鲜花", "北京鲜花", "1+手机", "小米手机", "华为手机", "华为P30", "苹果手机"}var userQuery = "手机"matches1 := fuzzy.Find(userQuery, onlineAdverts)fmt.Println("在线广告:", onlineAdverts)fmt.Println("用户Query:", userQuery)fmt.Println("模糊查询到在线广告 : ", matches1)matches2 := fuzzy.RankFind(userQuery, onlineAdverts)fmt.Println("RandFind:", matches2)sort.Sort(matches2)fmt.Println("Sort RandFind:", matches2)matches3 := fuzzy.MatchNormalized("cartwheel", "cartwhéél")fmt.Println("match normalized:", matches3)
}

编译命令

#windows:
set GOPROXY=https://goproxy.io
go mod tidy
go build #Linux:
export GOPROXY=https://goproxy.io
go mod tidy
go build

运行结果

好,到此处基本上能够满足业务需求,喜欢的小伙伴,可以自己动手实现一下。

该文章公众号:“sir小龙虾”独家授权,其他人未经允许不得转载。

Go语言 模糊搜索实验(一)相关推荐

  1. c语言四则运算实验报告,c语言四则运算实验报告.doc

    c语言四则运算实验报告.doc 课程编号 1300050027 得分教师签名批改日期深 圳 大 学 实 验 报 告课程名称 C语言实验 实验名称 100以内的四则运算游戏 学 院 信息工程学院 指导教 ...

  2. 重庆理工大学c语言程序实验报告,重庆理工大学-C语言程序实验报告.doc

    重庆理工大学-C语言程序实验报告 程序设计基础C实验报告 PAGE 47 <程序设计基础C> 实 验 报 告 教学班级: 学号: 姓名: 课程教师: 实验辅导教师: 重庆理工大学计算机学院 ...

  3. 语言 上课点名 缺勤_主播日记5 | “云端”传递的C语言程序设计实验课

    因受疫情影响,全国各大高校纷纷延期开学,但停课不停学.停课不停教,课堂由线下向线上发生转移,教学方式也发生了转变,这既是对传统教学方法的一种挑战,也是推进和升华教学改革的一个契机.我校C语言程序设计实 ...

  4. c语言综合性实验数字益智游戏排行榜,C语言综合性实验报告1.doc

    C语言综合性实验报告1.doc 华北科技学院计算机系综合性实验 实 验 报 告 课程名称 C程序设计 实验学期 至 学年 第 学期 学生所在系部 年级 专业班级 学生姓名 学号 任课教师 实验成绩 计 ...

  5. c语言程序设计实验教学,C语言程序设计实验教学改革研究

    语言程序设计是目前各高校计算机及其相关专业的一门基础课程,也是其它工科专业学生必修的计算机基础课程之一,是学生学习程序设计的入门课程.同时,该课程是一门应用性很强的学科.随着计算机技术飞速发展,计算机 ...

  6. 重理工c语言实验指导书答案,常熟理工学院 C语言程序设计实验实验指导书及答案...

    常熟理工学院 C语言程序设计实验实验指导书及答案 实验一 熟悉C程序运行环境 班级 学号 姓名 成绩 一.实验目的 1. 熟悉C语言Visual C++6.0调试环境. 2. 掌握C程序的编辑.调试及 ...

  7. c语言指针实验报告总结,c语言指针实验报告

    c语言指针实验报告 C语言实习报告 题目:指针及其应用 系别: 专业: 姓名: 学号: 日期: 一 实验名称:指针及其应用 二 实验目的: (1) 掌握变量的指针及其基本用法. (2) 掌握一维数组的 ...

  8. c语言作业指导1,C语言程序设计实验与习题指导

    目录 部分C语言程序设计上机实验 实验1C语言概述 实验2C语言基本数据类型 实验3C语言表达式 实验4顺序结构程序设计 实验5选择结构程序设计 实验6基本循环结构程序设计 实验7嵌套循环结构程序设计 ...

  9. c语言消字母游戏实验报告,C语言编程实验报告格式示例

    暨南大学数学系数学系,2011年语言课程设计课程实验项目目录学生姓名: 学生ID: 实验项目名称计划时间和课程每组人数实验属性开放要求要求摘要实验1熟悉使用WinTC / VC验证实验2数据类型,运算 ...

最新文章

  1. HH的项链 (求区间内有多少个不同的数字)
  2. 在Java中使用Socket模拟客户端和服务端(多线程)
  3. Python 技术篇 - 使用unicode_escape对js的escape()方法编码后的字符串进行解码实例演示
  4. ASP.NET开源框架之HIPPO技术内幕(四)--多语言的实现
  5. 如何正确选择合适的贷款机构,避免征信花掉?
  6. 不可靠的信号、可靠信号
  7. php mysql存图片路径_PHP 批量下传图片 怎么保存路径到mysql
  8. 特征值分解、奇异值分解、PCA概念整理(转载)
  9. 综观java读取和创建excel方法
  10. tomcat源码阅读之session管理器(Manager)
  11. 带你领略Object.assign()方法的风骚操作
  12. Python学习笔记
  13. 无刷直流电机学习笔记5
  14. matlab上一次计算结果影响,matlab运行结果跟手算结果不一致怎么办
  15. java CANUSB_周立功USBCAN-II 上位机开发(MFC)
  16. 最强大脑记忆曲线(7)——“复习页面”逻辑实现
  17. 一个正项级数收敛, 它的平方也收敛吗?
  18. 怎么保护地球生物多样性
  19. iOS 12 - iOS 15,如何在iPhone上设置“早上好”功能
  20. hive只复制表结构不复制表数据

热门文章

  1. java字符串的运用代码_java – 如何使用mockito模拟一个字符串?
  2. 微型计算机普遍使用的编码是,微型计算机中普遍使用的字符编码是什么吗
  3. pandas读取前几行数据_csv – 读取大pandas数据帧前几行的方法
  4. eclipse 不能将maven jar包导入到tomcat中问题
  5. pl sql 工具insert into 中文 后, select为乱码
  6. iis7配置php-7,PHP--Windows 7 +IIS7配置
  7. 深夜,我偷听到程序员要对session下手.......
  8. 学习《apache源代码全景分析》之DSO概念
  9. 08-数组中常用的属性及方法
  10. AlexNet网络构建与训练