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
个索引,因此您的索引应仅包含 CMP
。 terms
查询也未被分析等,因此您的索引仅针对 CMP
进行搜索。因此应该有一个匹配项。
不再使用 @Oliver Charlesworth 现在 - 在 Elastic 6.x 中 - 你可以继续使用 keyword datatype
,用 normalizer
、doc here 小写你的文本。然而在任何情况下你都应该改变你的索引映射并重新索引你的文档
索引和映射创建以及搜索是测试套件的一部分。似乎没有执行测试套件的设置部分,并且没有将映射应用于索引。
索引随后使用默认类型而不是映射类型,这是使用字符串字段而不是关键字的结果。
更改自动化测试的设置方法后,映射很好地应用于索引,状态 "CMP" 的大写值现在是匹配文档。
我创建了一个示例索引,具有以下映射:
{
"_doc": {
"_source": {
"enabled": False
},
"properties": {
"status": { "type": "keyword" }
}
}
}
并索引了一个文档:
{"status": "CMP"}
使用术语查询搜索具有此状态的文档时,没有找到结果:
{
"query" : {
"terms": { "status": ["CMP"]}
}
}
但是,如果我通过将输入小写来进行相同的查询,我将找到我的文档:
{
"query" : {
"terms": { "status": ["cmp"]}
}
}
这是为什么?由于我是在关键字字段上进行搜索,因此不应分析索引内容并且应匹配大写值...
除非出现其他问题,否则不应出现您所看到的症状。
未分析 keyword
个索引,因此您的索引应仅包含 CMP
。 terms
查询也未被分析等,因此您的索引仅针对 CMP
进行搜索。因此应该有一个匹配项。
不再使用 @Oliver Charlesworth 现在 - 在 Elastic 6.x 中 - 你可以继续使用 keyword datatype
,用 normalizer
、doc here 小写你的文本。然而在任何情况下你都应该改变你的索引映射并重新索引你的文档
索引和映射创建以及搜索是测试套件的一部分。似乎没有执行测试套件的设置部分,并且没有将映射应用于索引。
索引随后使用默认类型而不是映射类型,这是使用字符串字段而不是关键字的结果。
更改自动化测试的设置方法后,映射很好地应用于索引,状态 "CMP" 的大写值现在是匹配文档。