在多个字段上进行 Elasticsearch 通配符搜索
Elasticsearch wildcard search on multiple fields
我正在构建一个过滤器函数,我想要的是一个通配符过滤器。如果值为 "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" 时才显示数据,这是不正确的。
使用下面的查询可以得到结果。
GET <index_name>/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "*roj*",
"fields":["field_1", "field_2"]
}
}
]
}
}
}
如果您想在所有字段中应用查询词,请删除上述查询中的字段属性。!!!
我正在构建一个过滤器函数,我想要的是一个通配符过滤器。如果值为 "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" 时才显示数据,这是不正确的。
使用下面的查询可以得到结果。
GET <index_name>/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "*roj*",
"fields":["field_1", "field_2"]
}
}
]
}
}
}
如果您想在所有字段中应用查询词,请删除上述查询中的字段属性。!!!