【问题标题】:Passing reduced ES query results to SQL将缩减的 ES 查询结果传递给 SQL
【发布时间】:2017-02-09 23:42:11
【问题描述】:

这是How to pass ElasticSearch query to hadoop 的后续问题。

基本上,我想在 ElasticSearch 中进行全文搜索,然后将结果集传递给 SQL 以运行聚合查询。这是一个例子:

假设我们在具有 10B 条记录的财务数据库中搜索“终结者”。它有以下匹配项:

  • “终结者”(100 万条结果)
  • “终结者 2”(1000 万条结果)
  • “XJ4-227”(1 个结果 ==> 这里“终结者”在标题的概要中)

我们不会传回 10+M 个 ID,而是传回以下“简化查询”--

...WHERE name in ('Terminator', 'Terminator 2', 'XJ4-227')

我们如何编写这样的算法来将 ES 结果集缩减为可以发送回 SQL 的最小可能过滤查询? ES 是否有任何类型的匹配元数据可以帮助我们解决这个问题?

【问题讨论】:

    标签: sql hadoop elasticsearch lucene


    【解决方案1】:

    如果您知道哪个“not analyzed”(keyword at 5.x)字段适合您的用例,您可以通过terms aggregation 获得它们的不同值和匹配数。 sum_other_doc_count 甚至会告诉您搜索是否导致了太多不同的值,因为只返回前 N 个。

    当然,您可以在多个字段上运行术语聚合,并在 SQL 中使用具有最少不同值的字段。实际上,首先运行 cardinality aggregation 以了解应该对哪个字段运行术语聚合可能更有效。

    如果您的搜索是纯过滤器,则应缓存其结果,但请对这两种解决方案进行基准测试,因为您的 ES 集群有大量数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-25
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多