Elasticsearch 查询 filter/term 在涉及特殊字符时不起作用
Elasticseach query filter/term not working when special characters are involved
当“metadata.name”在“demo-application-child3”等文本中包含“-”时,以下查询不起作用。但是如果我删除“-”并查询“demoapplicationchild3”。有用。与其他字段相同metadata.version。我有 demoapplicationchild3 和 demo-application-child3 的数据。请提出建议。
{
"query": {
"bool": {
"filter": [
{"term": { "metadata.name": "demo-application-child3" }},
{"term": { "metadata.version": "00.00.100" }}]
}
}
}
未分析术语查询请参阅official doc,其中清楚地提到了这一点
Returns documents that contain an exact term in a provided field.
这显然意味着索引时间你正在使用一些自定义分析器,它正在删除 -
并加入令牌,即对于 demo-application-child3
你的自定义分析器将生成 demoapplicationchild3
令牌,这您可以使用 Analyze api.
轻松确认
如果您想获得结果,请将 term
查询更改为 match
查询,或者如果映射是动态生成的,请在您的字段中使用 .keyword
后缀,或者创建另一个字段输入 keyword,它使用 no-op 分析器。
当“metadata.name”在“demo-application-child3”等文本中包含“-”时,以下查询不起作用。但是如果我删除“-”并查询“demoapplicationchild3”。有用。与其他字段相同metadata.version。我有 demoapplicationchild3 和 demo-application-child3 的数据。请提出建议。
{
"query": {
"bool": {
"filter": [
{"term": { "metadata.name": "demo-application-child3" }},
{"term": { "metadata.version": "00.00.100" }}]
}
}
}
未分析术语查询请参阅official doc,其中清楚地提到了这一点
Returns documents that contain an exact term in a provided field.
这显然意味着索引时间你正在使用一些自定义分析器,它正在删除 -
并加入令牌,即对于 demo-application-child3
你的自定义分析器将生成 demoapplicationchild3
令牌,这您可以使用 Analyze api.
如果您想获得结果,请将 term
查询更改为 match
查询,或者如果映射是动态生成的,请在您的字段中使用 .keyword
后缀,或者创建另一个字段输入 keyword,它使用 no-op 分析器。