关于数据库中的中文模糊检索探讨
本帖最后由 枫林落幕 于 2022-8-4 08:52 编辑现在碰到这样的场景,我现在数据库中有近上万中的数据在。他们的格式就是一个中文,一个英文,一个id。
现在开始检索中文,但是他的sql是模糊检索的。应该是%xxx% 。怎么样,能让程序快速的响应出检索的数据
尝试,探讨:(场景做到的是包含查询,那些单边%的场景,我想是sql基础知识,怎么走索引,怎么不走,百度都会有的)
1.首先在mysql中%xxx%;这种直接导致索引失效;增加硬件性能也是不能的;现在就是想讨论,关于设计上,性能上,编程上的问题
2.个人的想法,有想过通过将中文转为base64,通过中文分词,然后去匹配检索。
3.还有种,将所有的数据查出来后,将数据放在容器中,通过写小算法的方式,将数据检索出来
想问问各位,可有这方面的经验,对于中文的模糊检索,能够快速的检索出来数据
关于讨论到全文检索那个提出的es。在国产化,安全系数较高的生产环境,这种技术正在被提出怀疑,所以我不打算使用考虑es,这种额外插件似的功能
数据库的考虑,大家可能需要考虑到国产化以及多数据库的切换,设配问题。高阶函数,及特有函数的使用,不太推荐 正则表达式走索引吧? 第一,先建立对应中文字段索引, 第二,使用专门的索引查询语句。SELECT * FROM 表名 where MATCH(索引的字段) AGAINST ('查询文字') 现在数据库都支持中文索引了,可以试试
中文字段长的话,还是用es之类的搜索引擎好点吧感觉 Elasticsearch 可以了解下
或者用盘古分词、做个分词表,模板查询 的时候就去关联这表的数据,但这样这表的数据同样也会大到爆炸。 最左匹配原则
查询的时候 按 "xx%"
这种的应该会走索引 Vvvvvoid 发表于 2022-8-3 16:03
最左匹配原则
查询的时候 按 "xx%"
是的,这种将会走索引,就是出现,不使用这种模糊检索,想要的条件就是%xx% instr(列名,关键字)>0 学习学习 a397555462 发表于 2022-8-3 16:05
instr(列名,关键字)>0
这是特有高级函数,针对mysql,oracle可能是不错的简单选择,但是在国产化的数据库环境中,例如PostgreSQL或者换到其他第三方数据库,将会导致数据库适配大量工作,不太推荐
页:
[1]
2