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