有没有办法在不改变现有文档的情况下使 elasticsearch 不区分大小写?

Skr*_*dox 17 elasticsearch elasticsearch-5

Elasticsearch 是否允许我们查询不区分大小写的文档?或者我应该在查询之前将它们保存为不区分大小写?或者是否应该为整个索引设置一些设置以使其不区分大小写?

你能澄清一下这一刻吗?

Pol*_*ton 17

默认情况下,由于应用了映射弹性,这些字段不区分大小写。

试试下面:

PUT myindex/doc/1
{
  "name":"TEST"
}

GET myindex/_mapping
Run Code Online (Sandbox Code Playgroud)

它应该返回:

{
  "myindex": {
    "mappings": {
      "doc": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }          
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您使用下面的查询,它将返回一个匹配项(注意映射[文本和关键字]):

POST myindex/_search
{
  "query": {
    "match": {
      "name2": "test"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您明确指定将字段索引为keyword,那么它将区分大小写搜索。下面试试看;它不会返回任何结果。

PUT myindex/_mapping/doc
{
  "properties": {
    "name2": {
      "type": "keyword"
    }
  }
}

PUT myindex/doc/1
{
  "name2":"TEST"
}


POST myindex/_search
{
  "query": {
    "match": {
      "name2": "test"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

TLDR;使用默认映射或text类型 - 如果您将字段指定为仅索引keyword类型,则区分大小写。

  • 这是有效的,因为包含 `"test"` 的字段将自动映射为 `text`,由标准分析器处理。该分析器使用“小写”标记过滤器,因此它将将该字段索引为小写,并在查询时将查询词转换为小写。如果您到了需要创建自定义分析器(例如,针对特定语言的分析器、使用同义词等)的地步,您将了解有关分析器和标记过滤器的所有知识。 (10认同)
  • 这不会变得不区分大小写。如果我想搜索TeSt(用户输入的)怎么办?这将不支持这一点。我们能做的一件事是,我们可以将用户的输入取消大写并进行搜索 (3认同)