如何使用QueryStringQueryBuilder

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用QueryStringQueryBuilder相关的知识,希望对你有一定的参考价值。

我试图在一个非常简单的情况下使用QueryStringQueryBuilder,但我不明白为什么我得到的结果不是我从Kibana获得的结果。我究竟做错了什么?

Kibana:

GET .../_search
{
    "query": {
        "query_string" : {
            "query" : ""this is a query"",
            "lenient": true,
            "default_operator": "OR"
        }
    }
}

Java的:

private Optional<QueryStringQueryBuilder> parseQuery(String query) {
    if (query.equals("")) {
        return Optional.empty();
    }
    QueryStringQueryBuilder queryBuilder = QueryBuilders.queryStringQuery(query);
    queryBuilder.lenient(true);
    queryBuilder.defaultOperator(Operator.OR);
    return Optional.of(queryBuilder);
}

来自kibana的结果:totalhits = 3336.来自Java的结果:totalhits = 10018。

编辑:此方法调用parseQuery。输入是“这是一个查询”。

public Optional<SearchRequestBuilder> getRequestBuilderByQuery(SearchQuery query) {
        SearchRequestBuilder builder = getBuilderWithMaxHits(query.getMaxHits());
        builder.setFetchSource(Globals.getFIELDS(query.isIncludeStory()), new String[0]);
        parseQuery(query.getQuery()).ifPresent(builder::setQuery);
        return Optional.of(builder);
    }
答案

我不知道在这种情况下你的输入参数'查询'包含什么。

但我想你想在你的queryBuilder.queryName(String queryName)中设置QueryStringQueryBuilder

来自JavaDocs:

queryName(String queryName):设置在每次匹配时搜索matched_filters时可以使用的过滤器的查询名称。

另一答案

好的,我发现了问题。对kibana的查询有引号。这意味着它的处理方式不同于普通的String。 QueryStringQuerybuilder似乎是用“”,AND,OR,NOT来解析查询。这太神奇了!

以上是关于如何使用QueryStringQueryBuilder的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?