Elasticsearch能否通过带通配符的过滤器添加别名?
如何给匹配通配符路径的多个Elasticsearch文档添加别名?
我已经成功为单个文档添加别名,实现代码如下:
x="15-44931" es.indices.update_aliases({ "actions": [ { "add": { "index": 'job_old', "alias": x,"filter":{"term":{"path.virtual.keyword":"/15-44931/4.pdf"}}}} ] })
该操作将别名"15-44931"添加到了path.virtual为"/15-44931/4.pdf"的文档中。我想通过通配符(如"/15-44931/*")给多个文档添加该别名,尝试了以下代码但未生效:
{ "add": { "index": 'job_old', "alias": x,"filter":{"term":{"path.virtual":"/15-44931/*"}}}}
请问是否可行,该如何实现?
解决方案
你之前的代码不生效是因为term查询是精确匹配,它不会解析通配符,只会把"/15-44931/*"当作完整字符串去匹配文档,自然找不到对应结果。要实现通配符匹配,需要用专门的通配符类查询:
1. 使用wildcard查询(支持任意通配符)
修改filter部分为wildcard查询,就能匹配所有path.virtual符合/15-44931/*规则的文档:
x="15-44931" es.indices.update_aliases({ "actions": [ { "add": { "index": 'job_old', "alias": x, "filter": {"wildcard": {"path.virtual.keyword": "/15-44931/*"}} } } ] })
注意继续使用.keyword字段,和你单个文档匹配时的字段保持一致。
2. 使用prefix查询(更高效的前缀匹配)
如果你的需求只是匹配以/15-44931/开头的路径,用prefix查询比wildcard更高效,因为它不需要处理复杂通配符逻辑:
x="15-44931" es.indices.update_aliases({ "actions": [ { "add": { "index": 'job_old', "alias": x, "filter": {"prefix": {"path.virtual.keyword": "/15-44931/"}} } } ] })
这两种方式都能实现给符合路径规则的多个文档批量添加别名的需求,可根据实际场景选择。
内容的提问来源于stack exchange,提问作者ScottyCov
相关产品推荐
相关产品推荐

