1

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

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

并索引了一个文档:

{"status": "CMP"}

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

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

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

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

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

4

3 回答 3

1

没有更多的@Oliver Charlesworth 现在 - 在 Elastic 6.x 中 - 您可以继续使用 a keyword datatype,将您的文本小写,并使用 a normalizer, doc here。但是,在每种情况下,您都应该更改索引映射并重新索引您的文档

于 2018-04-10T10:37:47.343 回答
0

您看到的症状不应该出现,除非有其他问题。

keyword未分析索引,因此您的索引应仅包含CMP. 也不会分析terms查询等,因此您的索引仅搜索CMP. 因此应该有一个匹配。

于 2018-04-10T10:32:10.717 回答
0

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

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

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

于 2018-04-10T11:42:17.263 回答