如何使用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 提交?