枫林落幕 发表于 2022-8-3 15:31

关于数据库中的中文模糊检索探讨

本帖最后由 枫林落幕 于 2022-8-4 08:52 编辑

现在碰到这样的场景,我现在数据库中有近上万中的数据在。他们的格式就是一个中文,一个英文,一个id。
现在开始检索中文,但是他的sql是模糊检索的。应该是%xxx% 。怎么样,能让程序快速的响应出检索的数据


尝试,探讨:(场景做到的是包含查询,那些单边%的场景,我想是sql基础知识,怎么走索引,怎么不走,百度都会有的)
1.首先在mysql中%xxx%;这种直接导致索引失效;增加硬件性能也是不能的;现在就是想讨论,关于设计上,性能上,编程上的问题
2.个人的想法,有想过通过将中文转为base64,通过中文分词,然后去匹配检索。
3.还有种,将所有的数据查出来后,将数据放在容器中,通过写小算法的方式,将数据检索出来

想问问各位,可有这方面的经验,对于中文的模糊检索,能够快速的检索出来数据

关于讨论到全文检索那个提出的es。在国产化,安全系数较高的生产环境,这种技术正在被提出怀疑,所以我不打算使用考虑es,这种额外插件似的功能

数据库的考虑,大家可能需要考虑到国产化以及多数据库的切换,设配问题。高阶函数,及特有函数的使用,不太推荐

a397555462 发表于 2022-8-3 15:41

正则表达式走索引吧?

mainblog 发表于 2022-8-3 15:42

第一,先建立对应中文字段索引, 第二,使用专门的索引查询语句。SELECT * FROM 表名 where MATCH(索引的字段) AGAINST ('查询文字')

414269678 发表于 2022-8-3 15:54

现在数据库都支持中文索引了,可以试试
中文字段长的话,还是用es之类的搜索引擎好点吧感觉

披星代月 发表于 2022-8-3 15:59

Elasticsearch 可以了解下
或者用盘古分词、做个分词表,模板查询 的时候就去关联这表的数据,但这样这表的数据同样也会大到爆炸。

Vvvvvoid 发表于 2022-8-3 16:03

最左匹配原则

查询的时候 按 "xx%"
这种的应该会走索引

枫林落幕 发表于 2022-8-3 16:04

Vvvvvoid 发表于 2022-8-3 16:03
最左匹配原则

查询的时候 按 "xx%"


是的,这种将会走索引,就是出现,不使用这种模糊检索,想要的条件就是%xx%

a397555462 发表于 2022-8-3 16:05

instr(列名,关键字)>0

ZC19931204 发表于 2022-8-3 16:08

学习学习

枫林落幕 发表于 2022-8-3 16:10

a397555462 发表于 2022-8-3 16:05
instr(列名,关键字)>0

这是特有高级函数,针对mysql,oracle可能是不错的简单选择,但是在国产化的数据库环境中,例如PostgreSQL或者换到其他第三方数据库,将会导致数据库适配大量工作,不太推荐
页: [1] 2
查看完整版本: 关于数据库中的中文模糊检索探讨