我应该在Elasticsearch中为文档personId选择关键字的数据类型还是long / integer?

Xin*_*Xin 0 elasticsearch

我有一个带有personId的文档(在DB中是int)。

我不确定应该选择keyword还是long在Elasticsearch中创建文档时?

在空间和性能方面,它们各自的优缺点是什么?(我只找到之间的区别textkeyword,而不是keywordlong

小智 10

一些数据是数字的事实并不意味着应始终将其映射为数字字段。Elasticsearch索引数字的方式可优化范围查询,而关键字字段则更适合术语查询。通常,在范围查询或聚合中很少使用存储标识符(例如ISBN或标识另一个数据库的记录的任何数字)的字段。这就是为什么将它们映射为关键字而不是整数或long可能会受益的原因。

引自https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/tune-for-search-speed.html#map-ids-as-keyword

  • 我昨天刚遇到这个问题。使用关键字索引与使用数字代替搜索数以千计的整数“术语”执行速度快 2 倍以上。 (2认同)

Val*_*Val -4

如果您的 personId 是数据库中的 int,我也会选择longES 中的类型。

keyword更适合您不想经历分析过程而只是存储为精确值的字符串数据。整数值不存在这种情况,您只是想存储其精确值,而这正是类型的作用long

  • 好吧,正如我已经说过的,关键字用于字符串数据,并且您有一个数字。数字可以按数字排序,而关键字则按词法排序(即 10 在 2、3、4...之前)。如果您需要对该 id 进行范围查询或聚合,那么正是出于这个原因,“long”将更合适。如果您需要能够在这些 id 上搜索(边缘)ngram(即通过前缀、子字符串或后缀),那么您将需要一个带有分析功能的“text”类型。没有什么可以阻止您同时拥有两者,即长类型和子字段作为关键字或分析字符串以满足您的需求。 (2认同)