【问题标题】:Elasticsearch wildcard search on multiple fields在多个字段上进行 Elasticsearch 通配符搜索
【发布时间】: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”时才显示数据,这是不正确的。

【问题讨论】:

标签: java elasticsearch filter wildcard elk


【解决方案1】:

使用下面的查询,您可以获得结果。

GET <index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "*roj*",
            "fields":["field_1", "field_2"]
          }
        }
      ]
    }
  }
}

如果您想在所有字段中应用您的查询词,请删除上述查询中的字段属性。!!!

【讨论】:

  • query_string 它只搜索每个前缀,而不是字符串的整个前缀/短语。
猜你喜欢
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多