版本:elasticsearch 7.8
索引就两个字段,id 和 content ,主要就是实现 content 的模糊搜索
现在单索引 4000 万数据,大小为 35G ,机器内存 16G
刚开始一千多万数据的时候第一次搜索 2-3 秒,后面搜索基本上 1-2 秒
两千多万的时候首次搜索 5-6 秒,后面搜索 2-3 秒
现在三千多万数据了,首次搜索达到了 10 秒,后续搜索 3 秒左右
这种情况怎么做预加载?看手册用 Eagerly load fielddata 和 Eagerly load global ordinals 都行不太通,内存分给 es 就 8G ,content 字段肯定就超过 30G 了,不可能丢到内存里面去。
还有什么办法?
1
encro 2022-11-09 18:55:01 +08:00
多分几个 index ?
多少核? 用什么分词? 预热能不能解决问题? 你以前用什么方案? |
2
encro 2022-11-09 18:56:24 +08:00
这么久是索引没做好吧?
|
3
sadfQED2 2022-11-09 19:15:50 +08:00 via Android
16G 内存的机器搞毛 es 啊,实在不想,你 16g 的机器最少也得开 3 台吧。
|
4
tellmeworld OP @encro 就一个 index ,英文的,不用分词,以前一两千万搜索 2 3 秒还能接受,数据量这么大又只有一个 index ,一个字段(除 id),这个要怎么做预热?
|
5
tellmeworld OP @sadfQED2 个人开发的项目,不是公司的,没有资金堆😪
|
6
sadfQED2 2022-11-09 19:21:50 +08:00 via Android
Mapping 和查询语句发出来看看
|
7
zhady009 2022-11-09 19:38:28 +08:00 via iPhone
Sonic 应该更适合你,但是现在要迁移数据改客户端代码什么的估计也不太愿意做
|
8
zzl22100048 2022-11-09 21:11:20 +08:00
内存不够,不应该用 es
|
9
statumer 2022-11-09 22:51:52 +08:00
现在一条 32g 内存只要三百多块钱。。
|
10
encro 2022-11-10 09:03:23 +08:00
|
11
opengps 2022-11-10 09:17:19 +08:00
先做几个常见的查询,预热只是加载那些匹配高的热数据
|