想写一个和 everything 差不多的东西,目前试了用 mysql ,插了 130 万个文件名进去,引擎用 MyISAM ,ngram 索引,最短长度设置为 2 ,然后匹配".py",大概 48W 个结果,执行时间长达 5 秒。 有没有什么更加适合干这事的数据库或者方法。elastic search 这种特别重量级的就不考虑了。
1
securityCoding 218 天前 via Android
速刷一下 leetcode 字符串匹配。。。
|
2
foolishcrab 218 天前 via iPhone
你需要的是一个全文搜索引擎
大部分语言都有轻量级实现 比如 java 有个 lucene |
3
fardream OP @securityCoding 我想要的是基于索引的...
|
4
haiku 218 天前
ES 的 Go/Rust 轻量级替代品,Meilisearch ZincSearch
|
5
xupefei 218 天前 via iPhone
手写 AC 自动机😂
|
6
henix 218 天前
手写后缀树
|
7
netnr 218 天前 via Android
duckdb
|
8
tyrantZhao 218 天前
手写 kmp 。。。qaq
|
9
netnr 218 天前
|
10
jorneyr 218 天前
Redis 有全文索引
|
11
fugu37 218 天前
性能慢的不正常,查询有问题,可能没有走索引
|
12
fardream OP @fugu37 不建全文索引都没法调用 match 啊..
``` SELECT id FROM files WHERE MATCH(name) AGAINST('".py"' IN BOOLEAN MODE) ; ``` 搜索 bpy apy 只有几百条,都能在 1s 内完成,cpy ,.py 都是十几万条,就掉到 3S 以上了 |
13
fardream OP emmmmm 把 ngram 索引换成普通的索引,查询时间变成了 700ms,想不懂为什么..........
|
14
fugu37 218 天前
@fardream #12
".py" 中的 "." 有问题 Fulltext index match string with period (.) mysql https://stackoverflow.com/questions/43319480/fulltext-index-match-string-with-period-mysql |
15
fardream OP @fugu37 emmm 我搜索"pyc" / "py"也是一样的慢,完全无法理解为什么。我全部 select 到内存里,golang 直接暴力搜也才花了 98ms.....
|
16
Gitmeeri 217 天前
19 亿数据在 35s 内完成查询
|
17
coder001 217 天前
才 130 万,就算每个条目 1KB 也才 1.3GB ,完全可以全部载入再用循环去筛选,按照当下的处理器速度应该不会太慢🐶
|
18
netabare 216 天前
我也想知道这东西该怎么设计,想给自己 blog 做一个。随便搜一下满屏幕的 ES 、Redis 和布隆真是让人绷不住。
我自己一开始的想法是 edit distance ,但这个数据集太大的话效率感人。 跟人讨论的结论似乎是先建索引,也有查到倒排索引之类的东西,对我的使用场景应该足够,但如果有上百万条数据的话我不好说。 |
19
mmdsun 216 天前 via iPhone
Java 用 lucene ,不想用 es 的话
|