elasticsearch 存储整数比存储全文更好吗?,elasticsearch,normalization,data-modeling,database-normalization,elasticsearch,Normalization,Data Modeling,Database Normalization" /> elasticsearch 存储整数比存储全文更好吗?,elasticsearch,normalization,data-modeling,database-normalization,elasticsearch,Normalization,Data Modeling,Database Normalization" />

elasticsearch 存储整数比存储全文更好吗?

elasticsearch 存储整数比存储全文更好吗?,elasticsearch,normalization,data-modeling,database-normalization,elasticsearch,Normalization,Data Modeling,Database Normalization,我正在尝试使用ES整合一个报告解决方案。 由于我在ES方面的经验相当基础,我想知道在过滤时使用整数是否会产生影响 我知道我的过滤器的值是什么,我不允许全文搜索 因此,在我的问题中,我可以 { "filter" : { "term" : { "gender" : 1 } } 或 { "filter" : { "term" : { "gender" : "male" } } 使用整数而不是字符串搜索会更快吗 另外,我假设使用整数会更好地利用磁盘空间,对吗 最后,在不需

我正在尝试使用ES整合一个报告解决方案。 由于我在ES方面的经验相当基础,我想知道在过滤时使用整数是否会产生影响

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

因此,在我的问题中,我可以

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

{
  "filter" : {
    "term" : { "gender" : "male" }
}  
使用整数而不是字符串搜索会更快吗

另外,我假设使用整数会更好地利用磁盘空间,对吗

最后,在不需要全文搜索的情况下,使用MySQL是否更好

非常感谢,

Angel

对于过滤器来说,它不太可能有什么不同。然而,需要记住的是,在聚合过程中,文档值字符串字段(例如未分析的字段)将加载到称为全局序号的堆内存映射中。这取决于可能对JVM施加巨大压力的可能值的数量(对于性别而言,可能非常小)

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

就MySQL和ES而言,这是一个更棘手、更微妙的问题。这取决于(除其他外)您正在尝试做什么,您正在处理多少数据,以及您是否需要事务性保证和/或MVCC。MySQL和ES在使用这样的过滤器时都会表现得非常好(假设您在MySQL中对性别设置了二级索引……这实际上是Lucene映射的关系的基于B树的版本)。根据您提供的信息,没有理由选择一种工具而不是另一种。你要么需要提供更多的背景,要么(也许更好)尝试一下这两种方法,看看哪一种更适合你


祝你好运。

哇,谢谢你!我猜在第二段的末尾,你的意思是“这不应该有任何区别”?基本上,我正在开发的整个报告模块从一个“数据湖”中获取大量日志条目,处理它们并为过滤做好准备。我们的想法是将经过处理的nginx/squid/etc日志保存到MySQL中各自的表中,但我们将其转换为一种非规范化的ES类上下文,其中“用户”类型的文档将具有用户属性,然后是每分钟nginx日志、squid日志等的嵌套对象数组。这有意义吗?“我想在第二段末尾,你的意思是“这不会有任何区别。”“--你说得对,是的。在这个问题上,我倾向于使用ES而不是MySQL。日志记录数据通常不需要持久性和可序列化性保证,如果您需要搜索日志,那么在ES中搜索会容易得多。另外,我假设您希望在一段时间后使日志过期。在ES中,这非常容易管理。在MySQL中,从表中删除数据不会回收磁盘空间。所以,您需要定期运行OptimizeTable以触发压缩,这将在表运行时锁定表的写操作。除非您需要MySQL提供的保证,否则我可能会使用ES