我尝试在一个非常简单的情况下使用 QueryStringQueryBuilder,但我不明白为什么我得到的结果与从 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);
}
我不知道在这种情况下您的输入参数“query”包含什么。
但我认为您想在 QueryStringQueryBuilder
中设置 queryBuilder.queryName(String queryName)
。
来自 JavaDocs:
queryName(String queryName): Sets the query name for the filter that can be used when searching for matched_filters per hit.
我是一名优秀的程序员,十分优秀!