我想对字符串" 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似乎已弃用。我目前正在使用2.3.4但可以升级。
答案 0 :(得分:0)
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")));
此查询等同于上面提到的查询。希望这有帮助