gpt4 book ai didi

sql - 将简化的 ES 查询结果传递给 SQL

转载 作者:可可西里 更新时间:2023-11-01 16:40:24 24 4
gpt4 key购买 nike

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

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

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

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

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

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

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

最佳答案

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

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

如果您的搜索是一个纯过滤器,那么它的结果应该被缓存但是请对这两个解决方案进行基准测试,因为您的 ES 集群有相当多的数据。

关于sql - 将简化的 ES 查询结果传递给 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com