1
Morriaty 2018-08-31 10:41:51 +08:00
1. 集群几个 nodes ?索引几个 shards ?什么样的 mapping ?什么样的 query ?
2. fielddata 是为了 text 类型做 agg 用的 3. es 有缓存 |
2
alwayshere OP @Morriaty 就单机版,'number_of_shards' => 1,'number_of_replicas' => 1,就简单的在两个 text 字段中查询,然后按照一个 integer 字段进行 function score 排序,field_value_factor modifier 是 log1p,boost_mode 是 multiply
|
3
tongxiaomu 2018-08-31 11:19:43 +08:00
首次检索的时间用时有些不正常,600W 数据,简单的 query 查询应该在 100~200ms 左右,至于第二次查询为什么时间很低,基本上是 10+-ms 的级别,建议 lz 先了解下 es 的缓存机制,就类似于 mysql 查询其实也会有缓存的,多了解下这个对以后查询优化也是有帮助的。
|
4
Morriaty 2018-08-31 11:42:04 +08:00
@alwayshere 改成四个分片,over
|
5
alwayshere OP @Morriaty 谢谢,刚刚研究了一下 ES 的文档,是不是可以猜想为 CPU 有多少个核,分片数就该有多少?比如我的服务器目前是 4 核 8 线程,是不是该设置成'number_of_shards' => 4,'number_of_replicas' => 1
|
6
alwayshere OP @Morriaty 数据量不大,就 8G 左右的数据
|
7
misaka19000 2018-08-31 13:27:32 +08:00
单机可以把 R 分片设为 0
|
8
daigouspy 2018-08-31 13:28:38 +08:00 via Android
@alwayshere 才 8g 数据,全部扔内存里也不至于那么慢吧?
|
9
alwayshere OP @daigouspy 我就是用 fielddata:true,这样把 text 字段全扔内存啊,有没有其他方式可以让 ES 将所有数据常驻内存?
|
10
owenliang 2018-08-31 20:14:05 +08:00 via Android
机械盘血亏
|
11
winglight2016 2018-08-31 21:00:52 +08:00
使用默认配置都不会这么慢啊,我在本地 pc 上默认安装,数据 800 多万条,3.6g ,随便条件查询一下只要 7ms,只有全匹配才会用到 400-500ms
另外,java 内存可以看看设置了多少,能不能调大一点 |
12
wsc449 2018-09-01 00:40:50 +08:00
客户数据 1 千万+,存储在单台 2 核 8g 内存下查询不超过 500 毫秒,3 台集群下并发查询和更新效率更好。
|