我想对字符串“user”进行全文搜索,它可以匹配文档中的任何字段,然后应用过滤器,以便我只获得 x feild 值为“abc”或“xyz”的记录。
摆弄 Sense ,以下请求满足我的要求。
GET _search
{
"query":{
"filtered":{
"query":{
"query_string": {
"query": "user"
}
},
"filter":
[
{"term": { "x": "abc"}},
{"term": { "x": "xyz"}}
]
}
}
}
但是,我想要一个 java api 来完成上述工作。我已经搜索了弹性文档和SO,但没有找到我正在寻找的东西,因为像QueryBuilders.filteredQuery这样的api似乎已被弃用。我目前使用的是 2.3.4,但可以升级。
最佳答案
Elasticsearch 2.x java Api 没有过滤查询的实现。根据elasticsearch文档,他们建议use the bool query instead with a must clause for the query and a filter clause for the filter.
在 java 中,您可以创建一个方法来为过滤查询创建包装方法。这就像:
public static QueryBuilder filteredQuery(QueryBuilder query, QueryBuilder filter){
BoolQueryBuilder filteredQuery = QueryBuilders.boolQuery().must(query);
return filteredQuery.filter(filter);
}
哪里,
QueryBuilder query = QueryBuilders.queryStringQuery("user");
QueryBuilder filter = QueryBuilders.boolQuery().filter(QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("x", "abc", "xyz")));
该查询与上面提到的查询等效。希望这有帮助
关于java - Elasticsearch java api 用于带过滤器的全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40447371/