Elasticsearch 6.2:术语查询在搜索关键字时需要小写输入

Elasticsearch 6.2: terms query require lowercase input when searching on keyword

我创建了一个示例索引,具有以下映射:

{
    "_doc": {
        "_source": {
            "enabled": False
        },
        "properties": {
            "status": { "type": "keyword" }
        }
    }
}

并索引了一个文档:

{"status": "CMP"}

使用术语查询搜索具有此状态的文档时,没有找到结果:

{
    "query" : {
        "terms": { "status": ["CMP"]}
    }
}

但是,如果我通过将输入小写来进行相同的查询,我将找到我的文档:

{
    "query" : {
        "terms": { "status": ["cmp"]}
    }
}

这是为什么?由于我是在关键字字段上进行搜索,因此不应分析索引内容并且应匹配大写值...

除非出现其他问题,否则不应出现您所看到的症状。

未分析 keyword 个索引,因此您的索引应仅包含 CMPterms 查询也未被分析等,因此您的索引仅针对 CMP 进行搜索。因此应该有一个匹配项。

不再使用 @Oliver Charlesworth 现在 - 在 Elastic 6.x 中 - 你可以继续使用 keyword datatype,用 normalizerdoc here 小写你的文本。然而在任何情况下你都应该改变你的索引映射并重新索引你的文档

索引和映射创建以及搜索是测试套件的一部分。似乎没有执行测试套件的设置部分,并且没有将映射应用于索引。

索引随后使用默认类型而不是映射类型,这是使用字符串字段而不是关键字的结果。

更改自动化测试的设置方法后,映射很好地应用于索引,状态 "CMP" 的大写值现在是匹配文档。