首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Elasticsearch中优化初始搜索查询延迟的启用的Fielddata和急切的全局序号之间有什么区别

在Elasticsearch中优化初始搜索查询延迟的启用的Fielddata和急切的全局序号之间有什么区别
EN

Stack Overflow用户
提问于 2021-01-25 04:38:18
回答 1查看 32关注 0票数 0

我运行了一个elasticsearch (7.10)集群,它主要用于在文本文档上进行搜索。我正在使用的索引不需要经常更新,在索引时间内对速度也没有很大的要求。这个系统的性能确实需要搜索时间。文档的数量可能总是在5,000-7,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000存储大小的存储大小,一旦它所有的构建。

我关心的索引和字段的映射如下所示:

代码语言:javascript
复制
"mappings": {
        "properties": {
            "document_text": {
                "type": "text"
            }
      }
}

document_text是一个文本字符串,长度在50-500个单词之间。发送到此索引的典型查询是在boolean should查询中链接在一起的match查询。通常,子句的数量在5-15个之间。

我遇到的问题是,对索引的搜索查询的初始延迟非常高,通常在4-6秒的范围内,但是在第一次搜索之后,文档被缓存,因此延迟变得更低,<1秒。该集群有3个数据节点、3个主节点和2个摄取/客户端节点,并由fast SSD提供支持。我注意到数据节点上的堆并没有真正承受太大的压力,RAM也没有,这让我意识到文档并没有按照我想要的方式预先缓存。根据我所做的研究,我选择了让fielddata=true在索引时获取内存中的字段数据对象,而不是在搜索时构造该对象。我知道这会增加JVM堆的压力,所以我可能会做一些频率过滤,只将某些文档放在内存中。我遇到的另一个选择是设置eager_global_ordinals=true,这在某种程度上类似于启用fielddata,因为它也会在索引时在内存中构建映射。我对ES还是个新手,两者之间的术语对我来说有点混乱。我想知道的是两者之间的区别是什么,并且确实使它们中的一个或两个看起来是合理的,以解决我的延迟问题,或者我完全误解了文档。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-25 16:48:20

启用eager_global_ordinals不会对您的查询产生任何影响。启用全局序号只对聚合有帮助,doc values将在索引刷新时加载,而不是在查询时加载。

启用fielddata也不会对您的查询产生任何实际影响。它的主要用途是排序和聚合,而您实际上并不想在text字段上执行这些操作。

在first ES查询速度较慢的情况下,您可能无法做太多事情。更好地关注最优索引映射、设置、分片和文档大小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65875695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档