【问题标题】:Not able to build query for Elasticsearch using java api无法使用 java api 为 Elasticsearch 构建查询
【发布时间】:2018-06-14 14:45:24
【问题描述】:

我正在尝试通过 java api 查询 elasticsearch 以获取以下 elasticsearch 查询

get my_index12/_search {
        "query" : {
            "bool": {
                "must": [
                    {
                        "match": {
                            "code": {
                             "query": "TE-7000-8002-W",
                             "operator": "and"
                            }
                        }
                    },
                    {
                        "match": {
                            "locale": {
                             "query": "en_US",
                             "operator": "and"
                            }
                        }
                    }
                ]
            }
        }
     }

上面的查询运行良好的是 Kibana。我正在尝试使用 Elasticsearch Java API 复制相同的查询。

请找到我正在尝试构建的 JAVA API 查询。

QueryBuilder qb = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("code",name)).operator(Operator.AND);

我从 eclipse 中得到以下错误。

The method operator(Operator) is undefined for the type BoolQueryBuilder

我使用的是 Elasticsearch 6.2.3 版本

【问题讨论】:

  • must 默认情况下会进行布尔 AND,您是否需要再次明确指定?

标签: java elasticsearch kibana elastic-stack


【解决方案1】:

在 java 传输客户端中,可以以 QueryBuilders 和 XContent 格式构建搜索请求,后者以 json 格式构建查询参数。 使用 QueryBuilder,尤其是 BoolQuery,查询 dsl 中的运算符由 must()(均值和运算符)或 should()(均值或运算符)表示。

如上所述,您的查询可以表示为:

QueryBuilders.boolQuery().must().must().build();

另一个有趣的问题是如何呈现以下查询 DSL:

{
    "query": {
        "bool": {
            "must": [{
                "term": {
                    "field1": "value"
                }
            }, {
                "match": {
                    "filed2": "value"
                }
            }],
            "should": [{
                "term": {
                    "field3": "value"
                }
            },{
                "term": {
                    "field4": "value"
            }]
        }
    }
}

一旦您能够理解演示查询 DSL 并使用 Java API 成功实现它,就意味着您正在了解 Java 传输客户端 API。 希望能给你一些帮助

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多