千万级模糊搜索算法讨论研究

实现:搜索partnumber列,用 02606 这样的字符模糊搜索,快速出结果
千万级模糊搜索算法讨论研究
杭州 雪花 2020/4/14 17:02:33
有何 实行方案

杭州 雪花 2020/4/14 17:03:01
@curl 大牛如果的如果

杭州 雪花 2020/4/14 17:03:41
代码实现哦,不想安装其他搜索插件

Zjmainstay 2020/4/14 17:20:56
db搜索不香么

Ares 2020/4/14 17:23:36
回答不知道就完事

杭州 雪花 2020/4/14 17:26:43
db哪种搜索能实现呢

杭州 雪花 2020/4/14 17:26:47
貌似不行啊

杭州 雪花 2020/4/14 17:26:54
like性能太慢

杭州 雪花 2020/4/14 17:27:09
全文索引 好像也不行啊

Zjmainstay 2020/4/14 17:28:55
如果是在文件里的话,grep可以试下

杭州 雪花 2020/4/14 17:29:19
我可以跑到文件的

百夫长统计-centcount.com 2020/4/14 17:29:25
将这一列全部读入Redis,看看Redis查找是否快点?毕竟是在缓存中操作

Zjmainstay 2020/4/14 17:29:37
redis怎么查

Zjmainstay 2020/4/14 17:29:44
他要搞内容的模糊搜索

杭州 雪花 2020/4/14 17:29:51
是的

百夫长统计-centcount.com 2020/4/14 17:29:54
keys

Zjmainstay 2020/4/14 17:30:02
。。。

杭州 雪花 2020/4/14 17:30:13
搞内容的模糊搜索 ,你们都用第三方的么

Zjmainstay 2020/4/14 17:30:14
这个关键词叫“卡死”

杭州 雪花 2020/4/14 17:30:44
第三方 搭建维护成本很高

杭州 雪花 2020/4/14 17:30:56
不想用,实在搞不定,也只能用了

百夫长统计-centcount.com 2020/4/14 17:31:36
keys1000万数据几秒内

杭州 雪花 2020/4/14 17:31:57
我要300毫秒内出结果

unhan 2020/4/14 17:33:14
昨晚喝的假酒还没醒?

unhan 2020/4/14 17:33:21

笨笨 2020/4/14 17:34:32
阿里云有个大数据分析服务 不知道你这个需求能不能满足.

百夫长统计-centcount.com 2020/4/14 17:34:41
太湖之光也许能做到,只能拼硬件了

不点 2020/4/14 17:34:53
拼算力

杭州 雪花 2020/4/14 17:35:20
自己写算法,有思路么

不点 2020/4/14 17:35:21
cpu超频,内存条超频

小韵子 2020/4/14 17:35:48
@杭州 雪花 数字的话 >=01402606000

杭州 雪花 2020/4/14 17:36:07
有字母的

杭州 雪花 2020/4/14 17:36:27
这列是 :字母+数字的

小韵子 2020/4/14 17:36:41
把字符串分词,单个字符分

The Milky Way 2020/4/14 17:36:50
只能分类

The Milky Way 2020/4/14 17:37:17
杭州 雪花
自己写算法,有思路么
@杭州 雪花 分类

The Milky Way 2020/4/14 17:37:33
你可以分为A-Z个区

The Milky Way 2020/4/14 17:37:52
把每个字的拼音首字母都放进去

百夫长统计-centcount.com 2020/4/14 17:37:52
你这是模糊查找,只能拼算力,把1000万数据切分成1000份,开1000个线程,估计能在毫秒内出结果。

小韵子 2020/4/14 17:38:03
自己写算法也要遍历的,数据在数据库里

The Milky Way 2020/4/14 17:38:16
数据库就不能设计一下吗?

The Milky Way 2020/4/14 17:38:24
全部杂进数据库?

The Milky Way 2020/4/14 17:38:27

小韵子 2020/4/14 17:38:41
长度固定就全部分成单个字母分别建立索引

The Milky Way 2020/4/14 17:38:49
+1

The Milky Way 2020/4/14 17:39:00
这样就能轻松很多

小韵子 2020/4/14 17:39:41
要么所有长度全部加索引,空间换时间

百夫长统计-centcount.com 2020/4/14 17:40:04
小韵子
长度固定就全部分成单个字母分别建立索引
@小韵子 这种索引也许有几十亿长度,画蛇添足

小韵子 2020/4/14 17:40:24
根据长度建立索引

小韵子 2020/4/14 17:40:46
好像不太对

小韵子 2020/4/14 17:40:53
还是单个字母建立索引吧

小韵子 2020/4/14 17:42:06
20的长度就建立20个字段(可以是虚拟字段能加索引,不用考虑数据一致性问题)

优秀的人一直在奔跑 2020/4/14 17:44:46

Zjmainstay 2020/4/14 17:57:48
Mac [2020-04-14 17:56] ➜ Desktop time grep 6424bfa23 /tmp/result.txt
0490e33d8006424bfa23cb2b9230db6c
grep --color 6424bfa23 /tmp/result.txt 10.57s user 0.13s system 98% cpu 10.824 total

10s

Zjmainstay 2020/4/14 17:57:53
grep 不可行~~

Zjmainstay 2020/4/14 17:58:43
只能自己写算法进行内容的map/reduce

curl 大牛如果的如果 2020/4/14 17:59:38
一次性载入内存

做个hash map映射

curl 大牛如果的如果 2020/4/14 17:59:40
很简单

►L̶̶o̶v̶e̶̶→. 2020/4/14 18:01:10
模糊搜索用hash map咋搞

Zjmainstay 2020/4/14 18:01:19
模糊搜索,什么数据结构支持

curl 大牛如果的如果 2020/4/14 18:01:38
他这个实际上不是模糊搜索

curl 大牛如果的如果 2020/4/14 18:01:46
只是因为刚好是数字字符串

Zjmainstay 2020/4/14 18:01:49
需求就是模糊搜索

curl 大牛如果的如果 2020/4/14 18:01:55
对啊 没错啊

curl 大牛如果的如果 2020/4/14 18:02:03
*12345的需求

Zjmainstay 2020/4/14 18:02:12

curl 大牛如果的如果 2020/4/14 18:02:15
不就是 把一棵树 、、、父节点为1

curl 大牛如果的如果 2020/4/14 18:02:22
的节点先找出

curl 大牛如果的如果 2020/4/14 18:02:25
然后这个结果集厘米

笨笨 2020/4/14 18:02:30
有字母他说

curl 大牛如果的如果 2020/4/14 18:02:31
再找出2

curl 大牛如果的如果 2020/4/14 18:02:32
3

curl 大牛如果的如果 2020/4/14 18:02:37
字母、、、

curl 大牛如果的如果 2020/4/14 18:02:39
一样的啊

Zjmainstay 2020/4/14 18:02:43
你要做搜索树?

curl 大牛如果的如果 2020/4/14 18:02:45

curl 大牛如果的如果 2020/4/14 18:02:47
搜索树

curl 大牛如果的如果 2020/4/14 18:02:56
全部载入内存

Zjmainstay 2020/4/14 18:03:00
跟敏感词那样

curl 大牛如果的如果 2020/4/14 18:03:04
c写的话

curl 大牛如果的如果 2020/4/14 18:03:07
毫秒级响应

Zjmainstay 2020/4/14 18:03:21
如果是这个的话,我知道有个东西搞

curl 大牛如果的如果 2020/4/14 18:03:40
反正原理就是那样了

curl 大牛如果的如果 2020/4/14 18:03:45
最近忙成狗了

curl 大牛如果的如果 2020/4/14 18:03:49
真惨、、

curl 大牛如果的如果 2020/4/14 18:04:10
一个多月没好好休息了我

Zjmainstay 2020/4/14 18:04:27

curl 大牛如果的如果 2020/4/14 18:04:40
不说了 搬砖去了

Zjmainstay 2020/4/14 18:05:00
php-ext-trie-filter

Zjmainstay 2020/4/14 18:05:14
@杭州 雪花

Zjmainstay 2020/4/14 18:05:43
你把你的内容,按1字符分隔,做成敏感词,基于这个扩展就可以构建出敏感词库

►L̶̶o̶v̶e̶̶→. 2020/4/14 18:05:52
建树的话 那放数据库 然后加索引 内部也是这种处理方法吧

Zjmainstay 2020/4/14 18:06:23
只不过,如果你的数据更新频繁的话… 生成树的过程挺慢的

►L̶̶o̶v̶e̶̶→. 2020/4/14 18:08:06
比如12345678 我搜索345 这个应该从哪个节点开始

►L̶̶o̶v̶e̶̶→. 2020/4/14 18:08:15
如果是123那简单

►L̶̶o̶v̶e̶̶→. 2020/4/14 18:08:31
从中间搜索想不明白树咋搞。。

Zjmainstay 2020/4/14 18:18:29
这是个好课题

Zjmainstay 2020/4/14 18:18:34
有空再研究

curl 大牛如果的如果 2020/4/14 18:29:45
@Zjmainstay 多维映射的问题

curl 大牛如果的如果 2020/4/14 18:29:52
两棵树

curl 大牛如果的如果 2020/4/14 18:30:13
或者是多树

curl 大牛如果的如果 2020/4/14 18:30:34
反正,无非就是空间换时间的问题

curl 大牛如果的如果 2020/4/14 18:30:42
内存足够,。。

curl 大牛如果的如果 2020/4/14 18:30:56
你mysql,整个表,载入内存buff

curl 大牛如果的如果 2020/4/14 18:31:02
最省事

Zjmainstay 2020/4/14 18:34:00
它是模糊搜索

Zjmainstay 2020/4/14 18:34:19
也就是前面可不命中

Zjmainstay 2020/4/14 18:34:27
后面全命中就行

curl 大牛如果的如果 2020/4/14 18:37:22
是的啊

Zjmainstay 2020/4/14 18:42:56
这个算法估计要自己写,常规的敏感词都是要全命中的

Zjmainstay 2020/4/14 18:43:26
或者是既定内容作为敏感词

Zjmainstay 2020/4/14 18:45:08
搜索对象反转了

►L̶̶o̶v̶e̶̶→. 2020/4/14 18:45:50
放存在然后按个循环 多线程都没必有用 然后缓存热数据最靠谱 这种搜索不管咋个想都需要完整遍历

►L̶̶o̶v̶e̶̶→. 2020/4/14 18:46:13
如果内容过长还有必要做处理 如果本身都是短字符串意义不大

猪肉炖粉条 2020/4/14 20:53:34
参考一下谷歌的word2vec 针对海量数据的相似度计算 把字符转换成向量之后 算余玄夹角

猪肉炖粉条 2020/4/14 20:56:02
这是NLP自然语言处理的领域 参考网站 http://www.52nlp.cn/

有更多高手,来探讨下怎么实现么?