2017-02-08 78 views
0

這是針對How to pass ElasticSearch query to hadoop的後續問題。將精簡ES查詢結果傳遞給SQL

基本上,我想在ElasticSearch中進行全文搜索,然後將結果集傳遞給SQL以運行聚合查詢。這裏有一個例子:

比方說,我們在有10B記錄的財務數據庫中搜索「終結者」。它具有以下匹配:

  • 「終結者」(1M結果)
  • 「終結者2」(10M結果)
  • 「XJ4-227」(1個結果==>這裏 「終結者」 是在標題的大綱)

而是回傳10個+ M ID的,我們會傳回下面的「減少查詢」 -

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

如何合作我們是否編寫了這樣的算法來將ES結果集減少到可以發送回SQL的最小可能的過濾器查詢? ES是否有任何可以幫助我們的匹配元數據?

回答

1

如果你知道其中「not analyzed」(keyword在5.x的)字段將是適合您的使用情況下,你可以通過terms aggregation得到他們獨特的價值觀和比賽的數量。 sum_other_doc_count甚至會告訴你,如果您的搜索導致太多不同的值,因爲只有返回的前N個。

當然,您可以在多個字段上運行術語聚合,並使用SQL中具有最少不同值的術語。實際上,首先運行cardinality aggregation可以更有效地知道您應該在哪個字段運行術語聚合。

如果你的搜索是一個純粹的過濾器,那麼它的結果應該被緩存,但是請把這兩個解決方案進行基準測試,因爲你的ES集羣有相當多的數據。

+0

@NikeNyrh - 謝謝我真的很喜歡這種方法。你有興趣幫助我們瞭解這個功能嗎?如果是這樣,請通過[email protected]給我發電子郵件。謝謝 – David542