当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch集成高级和低级API

孙成化
2023-03-14

我构建了Elasticsearch查询(DSL),如下所示。我想从Java应用程序中集成它。当我阅读时,高水平和低水平的Rest选项由Elastic提供。是否可以使用高级API构建复杂的查询?或者我将使用低级API,通过程序构建DSL?

GET myindex/_search
{
    "query": {
        "bool": {
        "must": [
          {
            "nested": {
              "path": "blog_types",
              "query": {
                "match": {
                  "blog_types.blog_type": 45649
                }
              }
            }
          },
          {
            "nested": {
              "path": "blog_types",
              "query": {
                "match": {
                  "blog_types.blog_type": 45647
                }
              }
            }
          }
        ],
        "filter" : {
            "geo_bounding_box" : {
                "request_location.location" : {
                    "top_left" : {
                        "lat" : 50.925996,
                        "lon" : 4.584309
                    },
                    "bottom_right" : {
                        "lat" : 50.845996,
                        "lon" : 4.494309
                    }
                }
            }
        }
        }
    }
}

共有2个答案

闻人越
2023-03-14

对于未来的用户:假设我们想要使用ES Client来复制此查询:

  {
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "table_name": {
                    "query": "google",
                    "operator": "and"
                  }
                }
              },
              {
                "match": {
                  "table_name": {
                    "query": "yahoo",
                    "operator": "and"
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "match": {
                  "vendor_type": {
                    "query": "9",
                    "operator": "and"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

使用此代码可获得以下信息:

    //Sub Query of MustBool
    BoolQueryBuilder mustNotBoolQueryBuilder = QueryBuilders.boolQuery();
    mustNotBoolQueryBuilder.mustNot(QueryBuilders.matchQuery("vendor_type",  String.valueOf(DBVendor.Collibra.getValue())).operator(Operator.AND));

    //Sub Query of MustBool
    BoolQueryBuilder shouldBoolQueryBuilder = QueryBuilders.boolQuery();
    assetNames.forEach(assetName -> {
        shouldBoolQueryBuilder.should(QueryBuilders.matchQuery("table_name",assetName).operator(Operator.AND));
    });

    //Root Bool
    BoolQueryBuilder mustBoolQueryBuilder = QueryBuilders.boolQuery();
    mustBoolQueryBuilder.must(shouldBoolQueryBuilder);
    mustBoolQueryBuilder.must(mustNotBoolQueryBuilder);
上官景铄
2023-03-14

好的,下面是:

QueryBuilder blogType1 = QueryBuilders.nestedQuery("blog_types", 
    QueryBuilders.matchQuery("blog_types.blog_type", 45649), ScoreMode.Avg);

QueryBuilder blogType2 = QueryBuilders.nestedQuery("blog_types", 
    QueryBuilders.matchQuery("blog_types.blog_type", 45647), ScoreMode.Avg); 

QueryBuilder geo = QueryBuilders.geoBoundingBoxQueryBuilder("request_location.location")
    .setCorners(50.925996, 4.584309, 50.845996, 4.494309);

QueryBuilder mainQuery = QueryBuilders.boolQuery()
    .filter(blogType1)
    .filter(blogType2)
    .filter(geo);

如果您需要或需要条件,可以使用should

QueryBuilder blogType1 = QueryBuilders.nestedQuery("blog_types", 
    QueryBuilders.matchQuery("blog_types.blog_type", 45649), ScoreMode.Avg);

QueryBuilder blogType2 = QueryBuilders.nestedQuery("blog_types", 
    QueryBuilders.matchQuery("blog_types.blog_type", 45647), ScoreMode.Avg); 

QueryBuilder geo = QueryBuilders.geoBoundingBoxQueryBuilder("request_location.location")
    .setCorners(50.925996, 4.584309, 50.845996, 4.494309);

QueryBuilder mainQuery = QueryBuilders.boolQuery()
    .should(blogType1)
    .should(blogType2)
    .filter(geo)
    .minimumShouldMatch(1);
 类似资料:
  • 本文向大家介绍高级语言和低级语言之间的区别,包括了高级语言和低级语言之间的区别的使用技巧和注意事项,需要的朋友参考一下 让我们首先了解高级和低级语言- 高级语言 与低级语言相比,它易于解释和编译。 它可以被认为是程序员友好的语言。 很容易理解。 这很容易调试。 在维护方面很简单。 它要求将编译器/解释器翻译成机器代码。 它可以在不同的平台上运行。 它可以从一个位置移植到另一位置。 i.e与低级语言

  • These are advanced, low-level API features that should, for most people not be necessary to worry about. They are lightly documented here, and in the future will have more documentation, but the empha

  • 集合类专门用于数据存储和数据检索,并提供堆栈、队列、列表和哈希表的支持。目前,大多数集合类都实现了相同的接口。 集合类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等,这些类所创建的是 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。 各种集合类及其用法 下表为一些常用的以 System.Collection 为命名空间的集合类,点击相应链接,可查看

  • 结果展示 结果展示文件需要使用测试脚本(命令)生成 junit 格式的 XML 文件,该文件路径由系统环境变量 `TEST_RESULT` 指定。例: nosetests test.py --with-xunit --xunit-file=$TEST_RESULT 结果: <?xml version="1.0" encoding="utf-8"?> <testsuite name="nosetes

  • 本文演示了 MINA 应用和 Spring 的整合。我在我的博客中写了这篇文章,后来也把它放在了这里,这里是这篇信息本来就该归类的地方。你可以在 Integrating Apache MINA with Spring 找到原始文本。 应用架构 一个标准的 MINA 应用应该具有以下构造: 一个 Handler (处理器) 两个 Filter (过滤器) - Logging 过滤器和 Protoco

  • Java Management Extensions(JMX,Java 管理扩展),用于管理和监控 Java 应用。本文将提供一个示例,以演示如何对基于 MINA 的应用集成 JMX。 本文旨在帮你将 JMX 技术集成到你的基于 MINA 的应用。在本文中,我们将把 MINA-JMX 相关类集成进图片服务器示例程序。 添加 JMX 支持 MINA 应用启用 JMX,我们需要执行以下步骤: 创建或者