【问题标题】:Elasticsearch mapping integer or longElasticsearch 映射整数或长整数
【发布时间】:2015-04-21 09:42:49
【问题描述】:

我在我的 laravel 应用中使用 ES 作为搜索引擎。

但是当涉及到映射时,我不确定何时对我的数字使用整数或长整数?

我有一个 MySql 数据库,可以将数据实时添加到我的 ES 数据库中。

我需要让我的号码可搜索或可排序。例如按价格排序或按价格搜索。

我在文档中找不到任何说明何时使用整数或长整数的内容。

提前致谢

【问题讨论】:

  • 你应该问问自己这些数字是否会扩展为 64 位,如果不使用 int,则使用 long。

标签: php mysql laravel elasticsearch


【解决方案1】:

int 和 long 之间的唯一区别是可以表示的数字的大小。基本上,int 是一个 32 位有符号整数,而 long 是一个 64 位有符号整数。所以,如果你需要表示的值大于231 - 1,那么你需要使用long。

为确保您可以按字段搜索/排序,您需要确保它已编入索引(not_analyzed)。

Elasticserach mapping 文档。
Elasticsearch core types 文档。
Java primitive types 文档。

【讨论】:

  • 好的,只是为了确定。我将其设置为“索引:not_analyzed”?为了使其可搜索
  • 因为我是一个真正的菜鸟。我可以在每个中存储多大的“数字”? 1 - 100000 ?
  • @user2722667 简短回答:是的。更长的答案:index 有三个选项:'analyzed'、'not_analyzed' 和 'no'。为了搜索/排序字段,您必须将index 设置为“已分析”或“未分析”。对于数字字段,“已分析”选项没有意义,因此要搜索/排序数字字段,您需要将index 设置为“not_analzyed”。相关文档权here.
  • @user2722667 2^32 = 4294967296。所以,如果你需要一个> 4294967295的数字,你需要使用long。
  • 感谢您让我明白这一点。 MySql 中的我的 pk 是一个递增的数字,但是当它在 1 - 4294967296 之间时我应该是安全的,这是很多行..
【解决方案2】:

如果您知道将为您的数字字段存储的最大值,那么我建议您选择适合您的字段的确切类型。即,不要使用long,如果integer 就足够了。文档https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html#_which_type_should_i_use 明确提到了这一点:

As far as integer types (byte, short, integer and long) are concerned, you should pick the smallest type which is enough for your use-case. This will help indexing and searching be more efficient

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多