这是How to pass ElasticSearch query to hadoop的后续问题。
基本上,我想在ElasticSearch中进行全文搜索,然后将结果集传递给SQL以运行聚合查询。这是一个例子:
让我们说我们搜索"终结者"在具有10B记录的财务数据库中。它有以下匹配:
我们不会回传10 + M ID,而是会传回以下“缩减查询”。 -
...WHERE name in ('Terminator', 'Terminator 2', 'XJ4-227')
我们如何编写这样的算法来将ES结果集减少到可以发送回SQL的最小可能的过滤器查询? ES是否有任何类型的匹配元数据可以帮助我们解决这个问题?
答案 0 :(得分:1)
如果您知道哪个" not analyzed" (keyword在5.x)字段适合您的用例,您可以通过terms aggregation获取其不同的值和匹配数。 sum_other_doc_count
甚至会告诉您搜索是否导致了太多不同的值,因为只返回前N个。
当然,您可以在多个字段上运行术语聚合,并使用SQL中具有最少不同值的字段。实际上,首先运行cardinality aggregation以了解应该运行术语聚合的字段可能会更有效。
如果您的搜索是纯过滤器,那么应该缓存其结果,但请对两个解决方案进行基准测试,因为您的ES群集包含大量数据。