如何使用ElasticSearch实现"join"/"子查询"?

9
我是新手在使用ElasticSearch,我想要对一个索引进行查询,然后使用结果的一部分来执行另一个查询。
例如,我们有一个“tags”索引,我们可以查询匹配的标签。该索引包含用于标识相关内容(钩入到)的存储字段。每种类型的内容都有自己的索引。我需要能够查询标签匹配,并返回不仅是标签结果,而且还有与之关联的内容中的存储字段(不同的索引中的“title”)。

我们可以使用ElasticSearch Hive连接器在Hive上对ElasticSearch数据存储执行JOIN操作吗?- https://github.com/elastic/elasticsearch-hadoop - sumanth232
1个回答

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()));
            }
        }

这里的getMethodResultEntity函数返回其他get查询的结果。

P.S. 我在这里使用ES java客户端,它有点重。如果你需要java客户端,最好使用jest客户端 - 更轻量级版本,适用于简单的情况。


我想知道是否有一种方法可以要求 Elastic Search 返回连接。如果您查看 http://www.elastic.co/guide/en/elasticsearch/guide/master/parent-child.html,他们指出“子文档可以作为搜索请求的结果返回”。 - Juan Solano
我们可以使用ElasticSearch Hive连接器在Hive上对ElasticSearch数据存储执行JOIN操作吗?- https://github.com/elastic/elasticsearch-hadoop - sumanth232

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接