代码之家  ›  专栏  ›  技术社区  ›  azer-p

Elasticsearch多字段通配符搜索

  •  0
  • azer-p  · 技术社区  · 6 年前

    我正在构建一个过滤器函数,我想要的是一个通配符过滤器。如果值为“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”时显示数据。

    0 回复  |  直到 6 年前
        1
  •  0
  •   dhamo    6 年前

    使用下面的查询可以得到结果。

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

    如果要在所有字段中应用查询条件,请删除上述查询中的字段属性。!!!