存储整数而不是全文更好吗?

时间:2017-01-16 13:58:13

标签: elasticsearch normalization data-modeling database-normalization

我正在尝试使用ES整理报告解决方案。 由于我对ES的经验非常基础,我想知道如果我在过滤时使用整数会有所不同。

我知道我的过滤器的值是什么,我不会允许全文搜索。

因此,在我的查询中,我可以

{
  "filter" : {
    "term" : { "gender" : 1 }
}

{
  "filter" : {
    "term" : { "gender" : "male" }
}  

使用整数而不是字符串搜索会更快吗?

另外,我假设使用整数它对磁盘空间更好,对吗?

最后,我最好在这种情况下使用MySQL - 不需要全文搜索?

非常感谢提前,
天使

1 个答案:

答案 0 :(得分:1)

对于过滤器,它不太可能有所作为。然而,需要记住的是,在聚合期间,文档值字符串字段(例如,未分析的字符串字段)将被加载到称为全局序数的堆内存储器映射中。取决于可能的值(对于性别可能非常小)可能会对JVM施加很大压力。

您可能尝试将此映射为布尔字段。如果您这样做,或者将其映射为整数,则可以节省一些空间。但从查询的角度来看,它应该有所不同。

就MySQL和ES而言,这是一个更棘手,更细微的问题。这取决于(除其他事项外)您要做什么,您正在使用多少数据,以及您是否需要交易保证和/或MVCC。 MySQL和ES都会在这样的过滤器上表现得相当好(假设您在MySQL中对性别设置了二级索引......实际上这是Lucene映射的基于B树的关系版本)。根据您提供的信息,我们没有充分理由选择一种工具而不是另一种工具。你要么需要提供更多的背景信息,要么(甚至可能更好)给它两个镜头,看看哪一个你更开心。

祝你好运。