Name:名称
Code:编码
AliasName:别名
MnemonicCode:助记码
PinyinCode:拼音码
需求:首先一张表有五个字段内容需要搜索,无论搜索哪个字段,匹配度要按顺序返回,实现最好的检索效果。
比如以下字段需要检索:
Name:名称
Code:编码
AliasName:别名
MnemonicCode:助记码
PinyinCode:拼音码
1、为了达到更好的搜索效果,对搜索可能性进行排序,比如用户最常用的就是用Name进行搜索,其次是Code,依次排序
2、如果关键字在内容中存在,并且出现在内容中的位置越靠前,权值越高。
你好啊 我是谁,你好啊
比如以上数据中,搜索“啊”,第一条数据中“啊”出现的位置是第三个字符,就比第二条数据匹配度高。
3、数据内容越短,权值越高。
高血压 高血压I型
比如以上数据中,搜索“高血压”,最匹配的明显是第一条数据。
4、现在我们将关键字出现的位置、内容长度进行排序,基本上能实现效果。
但是有个很大的问题:这个字段中,检索不到关键字,其他字段包含关键字,检索不到的字段长度会影响排序位置,直接让检索结果不准确。
我们还需要加一条规则,如果检索不到关键字,这个字段的内容长度要为0,不能影响排序。
综上规则,我们写了一个sql
SELECT Name,Code, AliasName, MnemonicCode, PinyinCode FROM icd_diagnoses WHERE SearchCode LIKE '%高血压%' ORDER BY LOCATE('高血压', Name),if(LOCATE('高血压', Name)>=0,CHAR_LENGTH(Name),0), LOCATE('高血压', Code),if(LOCATE('高血压', Code)>=0, CHAR_LENGTH(Code),0), LOCATE('高血压', PinyinCode),if(LOCATE('高血压', PinyinCode)>=0, CHAR_LENGTH(PinyinCode),0), LOCATE('高血压', AliasName),if(LOCATE('高血压', AliasName)>=0, CHAR_LENGTH(AliasName),0), LOCATE('高血压', MnemonicCode),if(LOCATE('高血压', MnemonicCode)>=0, CHAR_LENGTH(MnemonicCode),0);
这个sql中,每个字段,都将关键字匹配位置、内容长度参与排序,位置为0时,长度也为0
转换为EF的写法,如下:
.Where(e => e.SearchCode.Contains(searchCode)) .OrderBy(x => x.Name.IndexOf(searchCode)) .ThenBy(x => x.Name.IndexOf(searchCode) >= 0 ? x.Name.Length : 0) .ThenBy(x => x.Code.IndexOf(searchCode)) .ThenBy(x => x.Code.IndexOf(searchCode) >= 0 ? x.Code.Length : 0) .ThenBy(x => x.PinyinCode.IndexOf(searchCode)) .ThenBy(x => x.PinyinCode.IndexOf(searchCode) >= 0 ? x.PinyinCode.Length : 0) .ThenBy(x => x.MnemonicCode.IndexOf(searchCode)) .ThenBy(x => x.MnemonicCode.IndexOf(searchCode) >= 0 ? x.MnemonicCode.Length : 0) .ThenBy(x => x.AliasName.IndexOf(searchCode)) .ThenBy(x => x.AliasName.IndexOf(searchCode) >= 0 ? x.AliasName.Length : 0) ;
以上就是全部内容,你如果有更好的方案,可以发给我。
CarsonIT 微信扫码关注公众号 策略、创意、技术
.NET MYSQL ELECTRON 算法 LINUX C# HTML EF CODEFIRST JAVASCRIPT WEBAPI 二维码 .NET6 ORM ELK ELASTICSEARCH 日志归集 工具 SQLSERVER LOGSTASH .NET5 JENKINS 持续集成 自动化部署 CENTOS EFCORE MONGODB HTTPS CANVAS KIBANA
.NetCore WebAPI使用Apollo配置中心
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
《肖生克的救赎》
老布坐了50年牢,已经体制化了,出去之后无法适应时代的变迁,他选择了死亡;瑞德坐了40年牢,也体制化了,出去之后一样吃不开,但是他选择了生存;安迪不愿意相信命运,他只坐了19年牢,凭借那把“挖600年才能出去”的小锤子和他的信念,改变了自己的命运。
加州旅馆 (Eagles(老鹰乐队)演唱歌曲)
《加州旅馆》(Hotel California)是美国著名乡村摇滚乐队老鹰乐队(Eagles)的歌曲,由乐队鼓手Don Henley担任主唱,单曲发行于1977年2月22日,收录在乐队第五张录音室同名专辑《加州旅馆》中。
你生而真实,而非完美 20170614
我想做好的事情有好多,我想给家人更好的生活,给自己一个更强壮的体魄,给未来家庭更好的基础,给自己更好的精神修养。有次路过小巷子,看到一个父亲骑着自行车,正带着他儿子。我突然闪过的思考是我们活着为了什么?
八、Electron 之右键菜单-remote模块实现
Electron一个使用HTML、CSS和JavaScript开发桌面应用程序的框架。Electron可以生成在Windows、macOS和Linux上运行的应用程序,借助Electron可以把我们的web端应用直接移植到桌面端而无需再次开发,这样我们可以使用同一套代码在不同平台上运行应用,极大的缩短了开发时间。
配置中心-Apollo安装(CentOS 7.5 )
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
C#中Memcached的使用以及相关知识点
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
六、Electron 之网页安全政策 Content-Security-Policy
Content Security Policy 简称 CSP 是一种网页安全政策 CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。 CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一 台列入了白名单的可信主机。 通俗的讲开启 CSP 后可以让浏览器自动禁止外部注入恶意脚本,增加网站的安全性能。从 2.0 版本开始,如果使用 electron 的开发人员没有定义 Content-Security-Policy,Electron就会在 DevTool console 发出警告提示
《Despacito》 萨克斯版
《Despacito》是波多黎各歌手Luis Fonsi和Daddy Yankee合唱的歌曲,发行于2017年1月13日 。美国歌手Justin Bieber参与的混音版于2017年4月17日发行 ,该混音版于2017年5月登上美国Billboard Hot 100榜首。除此之外,原版和混音版在全世界20多个国家的榜单上获得冠军。
Newtonsoft.Json反序列化的时候,有些数据类型不支持怎么办?
Newtonsoft.Json 大多数人都用过,几乎每个项目都需要这个东西,他的作用是实现对象之间的转换,用得最多的就是json字符串和C#对象之间的转换,今天就来说一下,当遇到他转换不了的时候,我们怎么处理?
Oracle 小数前面0丢失的情况处理
Oracle是一个面向Internet计算环境的数据库。它是在数据库领域一直处于领先地位的Oracle(即甲骨文公司)的产品。可以说Oracle 关系数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。就这,仍然有需要改进的地方。
疫情数据关注工具-支持全平台版本(12月15停止更新,一个时代的结束)
疫情形式严峻,我十分关心每天的疫情动态,但是我发现无论是百度的疫情动态,还是腾讯的动态,数据都不完整,而且腾讯的风险地区更新不及时,导致经常看到错误数据。
.NET WebApi配置Swagger详细教程
Swagger可以根据xml文件生成api接口文档,前后端节约沟通时间,减少对接成本,是一个非常好的解决方案;本文主要记录一下,Vs2019从0开始,搭建一个WebApi最终利用Swagger看到相关接口,并解决Swagger汉化的问题,解决Swagger在.net Webapi中控制器名称标注问题。
《灵笼》白月魁 壁纸
国漫《灵笼》特别篇播出,作为第一季的大结局剧情,灵笼在最后一话的特别篇中终于把地面神秘人物白月魁的身份信息给揭露了出来,原来之前马克队长猜得没有错,当时在下到地面采集物资的时候,看到的女子其实就是白月魁小队,她们是生活在地面的人类,但是从本质而言,似乎已经和人类有所区别。
Hangfire任务调度从入门到实践
Hangfire是一个任务调度的组件,自带面板,可以操作正在运作的任务,可以看到执行情况,而且使用起来简单,Hangfire不受特定.NET应用程序类型的限制,只要是.NET Framework 4.5以上,Newtonsoft.Json library ≥ 5.0.1,有一个mysql或者mssql数据库即可。而且最新的支持.NET Core,这篇文章主要记录一下如何在.NET Core 3.1中用mysql来帮助Hangfire实现持久化。
Resharper 2021.3.2-VS2022可用的扩展插件
ReSharper是一个JetBrains公司出品的著名的代码生成工具。其能帮助Microsoft Visual Studio成为一个更佳的IDE,它包括一系列丰富的能大大增加C#和Visual Basic .net开发者生产力的特征。使用ReSharper,你可以进行深度代码分析,智能代码协助,实时错误代码高亮显示,解决方案范围内代码分析,快速代码更正,一步完成代码格式化和清理,业界领先的自动代码重构,高级的集成单元测试方案,和强大的解决方案内导航和搜索。实质上,ReSharper特征可用于C#,VB.NET,XML,ASP.NET,XAML,和构建脚本。ReSharper还为C#和VB.NET提供了增强的交叉语言功能,它使开发者可以有效的控制.net混合项目。
EFcore+MySql 数据迁移的时候,怎么给表结构加注释?
Microsoft.EntityFrameworkCore是一个非常不错的设计,当一套系统里面出现太多的SQL,其实已经不合理了,所以EF让开发者不再接触SQL,而是直接以对象形式操作数据库,EF来负责Sql代码生成和执行,通常在开发中,有根据数据表结构来生成实体的,也有根据实体生成数据库的,就是所谓的DbFirst和CodeFirst,这篇文章主要说一下CodeFirst的应用,用的是MySql数据库。
.NET5 WebApi 实现JWT及其验证实战
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。本文只是举个例子,可以这么整,如果要用于生产环境,可能得再封装一下,注释都加的齐全,没用过的可以看看。
阿里云对象存储OSS使用STS临时授权给Browser.js
阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务可用性(或业务连续性)不低于99.995%。OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。如果你的应用场景仅仅是网站上传个图片、视频这些,那么阿里云OSS和七牛云的作用是一样的。
C# 对比两个实体类指定字段是否被修改并得出修改记录
需求来源:一条数据被编辑之后,日志要记录下改动了什么项,从什么改成什么了,还得可以指定某些字段,比如用户表,只要改了用户名,就记录一下日志,业务可以根据是否有修改来发送通知啊或者启用禁用啊这些操作。
MongoDb 4.2.7 配置复制(副本集replSet)实现主从同步(Windows)
MongoDB在4.0之后,增加了事务,说明Mongodb生态越来越丰富,将来肯定可以满足更多的应用场景,在用了事务之后,操作数据的时候报错,提示实例需要是副本集,这篇文章就说一下,什么是副本集,能干啥?
Postman的一个小技巧 Pre-request Script的使用
Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。
利用PinYinConverter实现汉字转拼音,支持多音字
汉字转拼音的需求不多,但是遇到了再去写,稍显麻烦,索性写一个辅助类放着,这里利用了Microsoft.International.Converters.PinYinConverter类库,多音字则以多种组合的方式返回给开发者。
5年后,我们为什么要从 Entity Framework 转到 Dapper 工具?
向来有争议的话题都是公说公的理,婆说婆的理,Entity Framework的爱好者对此可以说是嗤之以鼻,不屑一顾,而Dapper爱好者则是举双手赞成,阅之大快人心。每个人不同的阅历,社会经验,甚至对简繁的偏见都会影响对此事的看法,凡事都有优劣,取其精华而弃之糟泊,方为上策。这篇文章则将目光聚焦到Dapper。
NPOI导出Excel,包含一个或者多个sheet表
NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。他导出的文件和你电脑右键创建的office文件一样原生,不会提示格式不符,重要的是不依赖office组件。
请打开您的微信,扫一扫
留下您的脚步
最近评论