join - 如何使用 ElasticSearch 执行 "join"/"sub-query"?

标签 join elasticsearch subquery

我是 ElasticSearch 的新手,我希望能够对索引进行查询,然后使用结果的一部分进行另一个查询。

例如,我们有一个 tags 索引,我们可以通过它查询匹配的标签。该索引包含存储的字段,用于标识与其关联( Hook )的内容。每种类型的内容都有自己的索引。我需要能够查询标签匹配,并让它不仅返回标签结果,还返回与其关联的内容(不同索引).

最佳答案

我遇到了类似的问题。你需要在这里加入。 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查询的结果。

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

关于join - 如何使用 ElasticSearch 执行 "join"/"sub-query"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230046/

相关文章:

python - 如何加入 Pyspark 中的多个列?

arrays - 将 Int 数组写入文本文件

sql - SELECTING 数据与 CASE 语句问题

php - Yii2 elasticsearch setAttributes()不起作用

MySQL:使用子选择计算本地化的 MIN MAX

sql - 有条件地从多个表加入

java - 使用 Elasticsearch Java API 运行文本查询

elasticsearch - ElasticSearch过滤所需的多个字段

SQL:子查询帮助

mysql - 有子查询的 MySQL INNER JOIN 查询有问题