You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ElasticSearch是否支持正则匹配字段名执行查询?

实现ElasticSearch中对所有sentence_*字段的查询

你提到的直接在match查询中使用sentence_*作为字段名的方式确实无法生效,因为Elasticsearch的match查询不支持字段名通配符。不过有两种常用方法可以实现你的需求:

方法一:使用multi_match查询配合字段通配符

multi_match查询支持通过通配符指定多个目标字段,你可以这样构造查询:

query_body = {
    "query": {
        "multi_match": {
            "query": "persistent",
            "fields": ["sentence_*"]
        }
    }
}
result = client.search(index=INDEX_NAME, body=query_body)
print(result)

这个查询会匹配所有以sentence_开头的文本字段,返回包含目标关键词的文档。

方法二:通过copy_to统一字段(更高效)

如果查询频率较高,建议在索引映射的动态模板中添加copy_to配置,把所有sentence_*字段的内容复制到一个统一的字段(比如all_sentences),之后直接查询这个字段即可,性能更优。

修改后的索引映射配置:

KNN_INDEX = {
    "settings": {
        "index.knn": True,
        "index.knn.space_type": "cosinesimil",
        "index.mapping.total_fields.limit": 10000,
        "analysis": {
          "analyzer": {
            "default": {
              "type": "standard",
              "stopwords": "_english_"
            }
          }
        }
    },
    "mappings": {
        "dynamic_templates": [
            {
                "sentence_vector_template": {
                    "match": "sent_vec*",
                    "mapping": {
                        "type": "knn_vector",
                        "dimension": 384,
                        "store": True
                    }
                }
            },
            {
                "sentence_template": {
                    "match": "sentence*",
                    "mapping": {
                        "type": "text",
                        "store": True,
                        "copy_to": "all_sentences"  # 添加这行,复制到统一字段
                    }
                }
            }
        ],
        'properties': {
            "metadata": {
                "type": "object"
            },
            "all_sentences": {  # 新增统一字段的定义
                "type": "text",
                "store": True
            }
        }
    }
}

修改映射后,需要重新索引数据,之后就可以通过简单的match查询实现需求:

query_body = {
    "query": {
        "match": {
            "all_sentences": "persistent"
        }
    }
}
result = client.search(index=INDEX_NAME, body=query_body)
print(result)

内容的提问来源于stack exchange,提问作者sunny_kid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:55:19