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

时间:2018-04-10 10:25:51

标签: elasticsearch elasticsearch-6

我创建了一个示例索引,其中包含以下映射:

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

索引一份文件:

{"status": "CMP"}

使用条件查询搜索具有此状态的文档时,我找不到任何结果:

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

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

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

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

3 个答案:

答案 0 :(得分:1)

不再是@Oliver Charlesworth Now - 在Elastic 6.x中 - 您可以继续使用keyword datatype,使用normalizer doc here小写文字。但是,在每种情况下,您都应该更改索引映射并重新索引文档

答案 1 :(得分:0)

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

未分析keyword索引,因此您的索引应仅包含CMP。还未分析terms查询等,因此仅搜索CMP的索引。因此应该有匹配。

答案 2 :(得分:0)

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

然后索引使用默认类型而不是映射类型,导致使用字符串字段而不是关键字。

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