我构建了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
}
}
}
}
}
}
}
对于未来的用户:假设我们想要使用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);
好的,下面是:
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,我们需要执行以下步骤: 创建或者