在elasticsearch中使用filteredQuery和userquery的QueryBuilder
QueryBuilder with filteredQuery and userquery in elasticsearch
我正在使用这段代码从 elasticSearch 获取数据:-
QueryBuilder qb;
if (query == null || query.trim().length() <= 0) {
qb = QueryBuilders.matchAllQuery();
} else {
qb = QueryBuilders.queryString(query.replaceAll(" ", " OR ").replaceAll(",", " AND ").replaceAll("!", " NOT "));
}
org.elasticsearch.action.search.SearchResponse searchHits = node.client()
.prepareSearch(name)
.setQuery(qb)
.addHighlightedField("file.filename")
.addHighlightedField("content")
.addHighlightedField("meta.title")
.setHighlighterPreTags("<span class='badge badge-info'>")
.setHighlighterPostTags("</span>")
.addFields("*", "_source")
.execute().actionGet();
这工作正常。但现在我想用这个查询过滤结果。就像我们在 filteredQuery 中所做的那样。
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/and-filter.html
如何使用 queryBuilder 添加 FilterBuilder?
QueryBuilder qb;
if (query == null || query.trim().length() <= 0) {
qb = QueryBuilders.matchAllQuery();
} else {
qb = QueryBuilders.queryString(query.replaceAll(" ", " OR ")
.replaceAll(",", " AND ").replaceAll("!", " NOT "));
}
FilterBuilder fb = FilterBuilders.andFilter(.....);
FilteredQueryBuilder fqBuilder = QueryBuilders.filteredQuery(qb, fb);
org.elasticsearch.action.search.SearchResponse searchHits = node
.client()
.prepareSearch(name)
.setQuery(fqBuilder)
.addHighlightedField("file.filename")
.addHighlightedField("content")
.addHighlightedField("meta.title")
.setHighlighterPreTags("<span class='badge badge-info'>")
.setHighlighterPostTags("</span>").addFields("*", "_source")
.execute().actionGet();
我正在使用这段代码从 elasticSearch 获取数据:-
QueryBuilder qb;
if (query == null || query.trim().length() <= 0) {
qb = QueryBuilders.matchAllQuery();
} else {
qb = QueryBuilders.queryString(query.replaceAll(" ", " OR ").replaceAll(",", " AND ").replaceAll("!", " NOT "));
}
org.elasticsearch.action.search.SearchResponse searchHits = node.client()
.prepareSearch(name)
.setQuery(qb)
.addHighlightedField("file.filename")
.addHighlightedField("content")
.addHighlightedField("meta.title")
.setHighlighterPreTags("<span class='badge badge-info'>")
.setHighlighterPostTags("</span>")
.addFields("*", "_source")
.execute().actionGet();
这工作正常。但现在我想用这个查询过滤结果。就像我们在 filteredQuery 中所做的那样。
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/and-filter.html
如何使用 queryBuilder 添加 FilterBuilder?
QueryBuilder qb;
if (query == null || query.trim().length() <= 0) {
qb = QueryBuilders.matchAllQuery();
} else {
qb = QueryBuilders.queryString(query.replaceAll(" ", " OR ")
.replaceAll(",", " AND ").replaceAll("!", " NOT "));
}
FilterBuilder fb = FilterBuilders.andFilter(.....);
FilteredQueryBuilder fqBuilder = QueryBuilders.filteredQuery(qb, fb);
org.elasticsearch.action.search.SearchResponse searchHits = node
.client()
.prepareSearch(name)
.setQuery(fqBuilder)
.addHighlightedField("file.filename")
.addHighlightedField("content")
.addHighlightedField("meta.title")
.setHighlighterPreTags("<span class='badge badge-info'>")
.setHighlighterPostTags("</span>").addFields("*", "_source")
.execute().actionGet();