
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 台集群下并发查询和更新效率更好。 |