【发布时间】:2019-11-27 12:40:12
【问题描述】:
我正在构建一个过滤器功能,我想要的是一个通配符过滤器。如果值为“roj”,则应显示任何包含“roj”的字段中的所有记录。
如何实现?
这是我的查询,
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "Project_error"
}
},
{
"wildcard": {
"api_name": {
"wildcard": "*roj*"
}
}
},
{
"wildcard": {
"error_Code": {
"wildcard": "*roj*"
}
}
}
]
}
}
}
Java 代码
BoolQueryBuilder bqb = new BoolQueryBuilder();
bqb.must(QueryBuilders.existsQuery("Project_error"))
if(!filter.isEmpty()) {
bqb.filter(QueryBuilders.wildcardQuery(fields[0],"*"+filter+"*"));
bqb.must(QueryBuilders.wildcardQuery(fields[1],"*"+filter+"*"));
...
}
searchSourceBuilder.query(bqb);
此脚本仅在两个字段都包含“roj”时才显示数据,这是不正确的。
【问题讨论】:
-
使用应该 (OR) 而不是必须 (AND)。 elastic.co/guide/en/elasticsearch/reference/current/…
-
我应该听你的。
AND运营商工作!谢谢
标签: java elasticsearch filter wildcard elk