大量短字符串模糊匹配用什么方法比较合适啊?

180 天前
 fardream

想写一个和 everything 差不多的东西,目前试了用 mysql ,插了 130 万个文件名进去,引擎用 MyISAM ,ngram 索引,最短长度设置为 2 ,然后匹配".py",大概 48W 个结果,执行时间长达 5 秒。 有没有什么更加适合干这事的数据库或者方法。elastic search 这种特别重量级的就不考虑了。

2277 次点击
所在节点    程序员
19 条回复
securityCoding
180 天前
速刷一下 leetcode 字符串匹配。。。
foolishcrab
180 天前
你需要的是一个全文搜索引擎
大部分语言都有轻量级实现
比如 java 有个 lucene
fardream
180 天前
@securityCoding 我想要的是基于索引的...
haiku
180 天前
ES 的 Go/Rust 轻量级替代品,Meilisearch ZincSearch
xupefei
180 天前
手写 AC 自动机😂
henix
180 天前
手写后缀树
netnr
180 天前
duckdb
tyrantZhao
180 天前
手写 kmp 。。。qaq
netnr
180 天前
写了个示例

创建表 files(id,name)
插入 200 万数据,耗时:00:00:04.1143475
查找 .py 结尾的文件共 368640 条,耗时:00:00:00.9355087

jorneyr
180 天前
Redis 有全文索引
fugu37
180 天前
性能慢的不正常,查询有问题,可能没有走索引
fardream
180 天前
@fugu37 不建全文索引都没法调用 match 啊..
```
SELECT id
FROM files
WHERE MATCH(name) AGAINST('".py"' IN BOOLEAN MODE)
;
```
搜索 bpy apy 只有几百条,都能在 1s 内完成,cpy ,.py 都是十几万条,就掉到 3S 以上了
fardream
180 天前
emmmmm 把 ngram 索引换成普通的索引,查询时间变成了 700ms,想不懂为什么..........
fugu37
179 天前
@fardream #12

".py" 中的 "." 有问题

Fulltext index match string with period (.) mysql

https://stackoverflow.com/questions/43319480/fulltext-index-match-string-with-period-mysql
fardream
179 天前
@fugu37 emmm 我搜索"pyc" / "py"也是一样的慢,完全无法理解为什么。我全部 select 到内存里,golang 直接暴力搜也才花了 98ms.....
Gitmeeri
179 天前
19 亿数据在 35s 内完成查询
coder001
178 天前
才 130 万,就算每个条目 1KB 也才 1.3GB ,完全可以全部载入再用循环去筛选,按照当下的处理器速度应该不会太慢🐶
netabare
178 天前
我也想知道这东西该怎么设计,想给自己 blog 做一个。随便搜一下满屏幕的 ES 、Redis 和布隆真是让人绷不住。

我自己一开始的想法是 edit distance ,但这个数据集太大的话效率感人。

跟人讨论的结论似乎是先建索引,也有查到倒排索引之类的东西,对我的使用场景应该足够,但如果有上百万条数据的话我不好说。
mmdsun
178 天前
Java 用 lucene ,不想用 es 的话

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1041762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX