【问题标题】:Make ElasticSearch handle fields that contain ranges使 ElasticSearch 处理包含范围的字段
【发布时间】:2017-04-27 00:15:53
【问题描述】:

在我索引到 Elasticsearch 的数据中,我有代表年份范围的字段,例如 1948-1999-2002

有没有办法让 Elastic 解释这些值以使范围内包含的任何年份都可搜索?

示例:
文档有一个名为 yearRange 的字段,其中包含值 1999-2001 如果我搜索q=yearRange:2000,我希望文档匹配。

我可以看到你可以通过让脚本生成一个年份数组来解决它,但我想知道是否有其他方法。

Elastic 2.4 是正在使用的版本。

【问题讨论】:

  • 我认为这在索引时处理得更好。意思是,做正确的事并在两个不同的领域中索引那些年。然后运行范围查询会容易得多,性能也会好得多。
  • 另外,如果有机会升级到 ES 5,范围类型是 supported natively
  • 如果您分别存储“开始”和“结束”年份,那么您可以为此创建一个过滤器。不过,处理缺失的开始和结束值会有点棘手。

标签: elasticsearch


【解决方案1】:

如果年份是连续的,那么您应该存储开始年份和结束年份,您可以轻松地对其进行范围查询。如果日期不连续,那么您可以将每个间隔表示为嵌套文档并以相同的方式对其进行查询。

每年生成并将其放入数组中会产生额外的负载,因为现在每年都会被索引,将为它们创建 doc_values,您的 _source 会很重等等。如果您可以用更少的数据执行查询,那么您应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-23
    • 2015-02-26
    • 2016-03-05
    • 2015-06-18
    • 2011-11-30
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多