2013-11-26 83 views
8

私はElasticSearchを初めて使いました。インデックスに対してクエリを実行したい場合は、結果の一部を使用して別のクエリを実行します。ElasticSearchを使用して「結合」/「サブクエリ」を行う方法は?

たとえば、一致するタグを照会できるtagsインデックスがあります。このインデックスには、関連付けられているコンテンツ(フックされている)を識別するための格納されたフィールドが含まれています。各タイプのコンテンツには独自のインデックスがあります。私は、タグの一致を照会することができ、タグの結果だけでなく、関連付けられているコンテンツ(異なるインデックス)からの格納されたフィールド(この場合はtitle)も返す必要があります。

+0

ElasticSearchデータストアのHiveからJOIN操作を実行するには、ElasticSearch Hiveコネクタを使用できますか? - https://github.com/elastic/elasticsearch-hadoop – sumanth232

+0

[Elastic Searchと "サブクエリ]の重複の可能性あり(http://stackoverflow.com/questions/8808832/elastic-search-and-sub-queries) – Ankur

答えて

5

私は同様の問題に直面しました。ここに参加する必要があります。 Elasticsearchチームは、アプリケーション側の使用を勧告します。 ESは、実装することで、リレーショナルデータベースは、我々のアプリケーションに参加するエミュレート:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/application-joins.html ですから、ESクライアントのいずれかを使用し、ここで

SearchResponse response = client.prepareSearch(scriptVersionFirst) 
        .setTypes("yourtype") 
        .setQuery(QueryBuilders.termQuery("multi", "test")) 
        .setFrom(0).setSize(60).setExplain(true) 
        .execute() 
        .actionGet(); 

    if (response != null) { 
     SearchHits hitList = response.getHits(); 
     if (hitList != null) { 
      SearchHit[] hits = hitList.hits();   
      for (SearchHit hit : hits) 
       MethodPojo source = gson.fromJson(hit.getSourceAsString(), MethodPojo.class); 
       System.out.println("Found: " + getMethodResultEntity(scriptVersionSecond, hit.getType(), source.getMethodName(), source.getMethodDesc(), source.getRequest())); 
      } 
     }

似た何かを書くことができ、他のGETクエリのgetMethodResultEntityリターン結果を機能します。

P.S.私はここでESのJavaクライアントを使用しています。それは少し重いです。 Javaクライアントが必要な場合は、jestクライアントを使用する方が良いでしょう。

+0

ジョイントを返すために弾性検索を行う方法があるのだろうかと思います。 http://www.elastic.co/guide/en/elasticsearch/guide/master/parent-child.htmlを見ると、「子文書は検索要求の結果として返すことができる」と書かれています。 –

+0

ElasticSearchデータストアのHiveからJOIN操作を行うためにElasticSearch Hiveコネクタを使用できますか? - https://github.com/elastic/elasticsearch-hadoop – sumanth232

関連する問題