Elasticsearch-Kibana:如何不指定字段实现全索引搜索?
嘿,这问题我之前也碰到过!你的当前查询因为明确指定了ProductDescription字段,所以只会在这个字段里匹配内容。要实现整个索引的全局搜索,有几个实用的方法:
方法1:使用
query_string查询(最直接) query_string查询默认会搜索索引中所有可搜索的字段,非常适合全局搜索场景。基础用法如下:
GET my_production_productsd/_search { "query": { "query_string": { "query": "women" } } }
如果想要和你原来的match_phrase_prefix一样支持前缀匹配,只需要在查询词后加*:
GET my_production_productsd/_search { "query": { "query_string": { "query": "women*" } } }
方法2:用
match_phrase_prefix指定全局字段 如果你更习惯用match_phrase_prefix语法,可以通过default_field: "*"来指定搜索所有字段:
GET my_production_productsd/_search { "query": { "match_phrase_prefix": { "default_field": "*", "query": "women" } } }
同理,普通的match查询也可以这么用:
GET my_production_productsd/_search { "query": { "match": { "default_field": "*", "query": "women" } } }
方法3:配置索引默认搜索字段(一劳永逸)
如果你的业务经常需要全局搜索,可以给索引设置默认搜索字段为所有字段,这样后续查询不用每次手动指定:
PUT my_production_productsd/_settings { "index.default_field": "*" }
配置完成后,直接用最简的match查询就能全局搜索了:
GET my_production_productsd/_search { "query": { "match": { "query": "women" } } }
小提示
用*匹配所有字段时,会包括一些Elasticsearch的系统字段(比如_id、_type),如果想排除这些字段,可以用* -_id -_type这样的语法来精准控制搜索范围。
内容的提问来源于stack exchange,提问作者kishan




