2017-02-08 4 views
0

これはHow to pass ElasticSearch query to hadoopへのフォローアップの質問です。縮小されたESクエリ結果をSQLに渡す

基本的に、私はElasticSearchでフルテキスト検索を実行して、集計クエリを実行するSQLに結果セットを渡したいです。ここでは例です:

は、我々は10Bの記録を持っている財務データベースに「ターミネーター」を検索するとしましょう。

  • "ターミネーター"(1M結果)
  • "ターミネーター2"(10M結果)
  • "XJ4-227"(1つの結果は==>ここで、 "ターミネーター" である:これは、次のマッチを有しています

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

    どのようにコ - タイトルの概要)

代わりに10個の+ MのIDをバック渡すので、私たちは以下の「減少の問合せ」をバック渡したいですuldは、ES結果セットをSQLに返すことのできる最小限のフィルタクエリに減らすためのアルゴリズムを記述していますか? ESにはこれに役立つマッチメタデータがありますか?

答えて

1

あなたが知っている場合は、terms aggregationによって彼らの個別の値と一致の数を得ることができ、あなたのユースケースのためにそれた「not analyzed」(5.xのでkeyword)フィールドが適切であろう。 sum_other_doc_countは、トップNだけが返されるため、検索結果の数値が多すぎる場合にも表示されます。

当然、あなたは複数のフィールド上の用語の集約を実行し、最も少ない異なる値を持っていたSQLの1を使用することができます。そして実際には、最初にcardinality aggregationを実行して、どのフィールドに用語集合を実行するべきかを知ることがより効率的になる可能性があります。

検索は、純粋なフィルターである場合、その結果はキャッシュされる必要がありますが、あなたのESクラスタがデータのかなり多くを持っているとして、ベンチマークの両方のソリューションをしてください。

+0

@NikeNyrh - このアプローチが本当に好きです。あなたはこの機能について私たちを助けてくれることに興味がありますか?その場合は、deemarklit @ gmail.comまでメールしてください。ありがとう – David542

関連する問題