elk 的弹性搜索 dsl 区分大小写

问题描述

我正在 ELK 上执行 Elasticsearch Query DSL 查询,例如:

{
  "query": {
    "wildcard": {
      "url.path": {
        "value": "*download*","boost": 1,"rewrite": "constant_score"
      }
    }
  }
}

但它似乎区分大小写(所以只显示带有“下载”的信息,而不是“下载”或“下载”)。 即区分大小写。

我可以禁用它吗?并搜索不区分大小写?

解决方法

您可以使用 case_insensitive 参数进行通配符查询。该参数在7.10.0版本引入

添加一个包含索引数据、映射、搜索查询和搜索结果的工作示例

索引映射:

{
  "mappings": {
    "properties": {
      "url": {
        "properties": {
          "path": {
            "type": "wildcard"
          }
        }
      }
    }
  }
}

索引数据:

{
  "url":{
    "path":"xx/download"
  }
}

搜索查询:

{
  "query": {
    "wildcard": {
      "url.path": {
        "value": "*Download*","boost": 1,"rewrite": "constant_score","case_insensitive": false
      }
    }
  }
}

搜索结果:

当您搜索 *Download**DOWNLOAD* 时不会有结果

更新 1:

如果您希望结果与 *download**Download**DOWNLOAD* 相匹配,那么所给出的查询将正常工作

{
  "query": {
    "wildcard": {
      "url.path": {
        "value": "*DOWNLOAD*","rewrite": "constant_score"
      }
    }
  }
}

搜索结果是

"hits": [
      {
        "_index": "67210888","_type": "_doc","_id": "1","_score": 1.0,"_source": {
          "url": {
            "path": "xx/download"
          }
        }
      }
    ]