You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动