通过Java API进行Elasticsearch查询

时间:2017-03-26 05:56:42

标签: java elasticsearch elasticsearch-dsl

我使用以下elasticsearch查询来获取详细信息,

{
    "query": {
        "bool": {
            "must": {
                "match_all": {}
            },
            "filter": {
                "bool": {
                    "should": [
                    {"match": {
                        "val": "GET"
                    }}]
                }
            }
        }
    }
}

工作正常并根据需要给出结果。

我想通过java执行相同的查询并获得相同的结果并尝试以下内容,

 getClient().prepareSearch(esIndex)
                .setQuery(QueryBuilders.queryStringQuery(QUERY)).execute().actionGet();

它不会返回数据并抛出一些查询格式错误的异常。

是否有可用的Java API可用于执行相同的查询?

注意:有可能在java api中创建boolquery和aggregation builder,并执行相同的操作。我很想找到一种直接通过elasticsearch java api

执行此查询的方法

3 个答案:

答案 0 :(得分:3)

如果您确实想使用查询字符串查询,则查询必须遵循Query String Syntax

getClient().prepareSearch(esIndex)
           .setQuery(QueryBuilders.queryStringQuery("val: \"GET\""))
           .execute()
           .actionGet();

如前所述,您应该使用提供的QueryBuilders而不是字符串来构造查询。即使对于复杂的查询,这也将使您的代码保持清晰和可读。

getClient().prepareSearch(esIndex)
           .setQuery(QueryBuilders.boolQuery()
                                  .should(QueryBuilders.matchQuery("val", "GET"))
           .execute()
           .actionGet();

答案 1 :(得分:2)

BoolQueryBuilder bool       =   boolQuery();

bool.must(QueryBuilders.matchAllQuery()); 
    bool.filter(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("Val", "GET")));

    AggregationBuilder agg = AggregationBuilders.terms("").field("");

    SearchResponse reponse =    getClient().prepareSearch().setIndices("indexName").setTypes("indexType")
                .setQuery(bool).addAggregation(agg).execute().actionGet();

答案 2 :(得分:1)

在构造QueryBuilder时应该使用boolQuery():

QueryBuilder qb = boolQuery()
            .must(termQuery("content", "test1"))
            .must(termQuery("content", "test4"))
            .mustNot(termQuery("content", "test2"))
            .should(termQuery("content", "test3"))
            .filter(termQuery("content", "test5"));

官方文档: https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-compound-queries.html