写点什么

Elasticsearch multi-index 搜索

用户头像
escray
关注
发布于: 2021 年 02 月 06 日
Elasticsearch multi-index 搜索

Elasticsearch multi-index search, Boost index 和 Multi-target syntax,文字内容来自 B 站中华石杉 Elasticsearch 高手进阶课程,英文内容来自官方文档。


如何一次性搜索多个 index 和多个 type 下的数据


GET /my-index-000001, my-index-000002/_search{  "query": {    "match": {      "user.id": "kimchy"    }  }}
GET /my-index-*/_search{ "query": { "match": { "user.id": "kimchy" } }}
GET /_search{ "query": { "match": { "user.id": "kimchy" } }}
GET /_all/_search{ "query": { "match": { "user.id": "kimchy" } }}
GET /*/_search{ "query": { "match": { "user.id": "kimchy" } }}
复制代码


  • /_search:所有索引,所有 type 下的所有数据都搜索出来

  • /index1/_search:指定一个 index,搜索其下所有 type 的数据

  • /index1,index2/_search:同时搜索两个 index 下的数据

  • /*1,*2/_search:按照通配符去匹配多个索引



因为 type 在新版的 Elasticsearch 中已经被弃用了,所以后面这几条就没有意义了。


  • /index1/type1/_search:搜索一个 index 下指定的 type 的数据

  • /index1/type1,type2/_search:可以搜索一个 index 下多个 type 的数据

  • /index1,index2/type1,type2/_search:搜索多个 index 下的多个 type 的数据

  • /_all/type1,type2/_search:_all,可以代表搜索所有 index 下的指定 type 的数据

搜索原理初步解释


Client 发送一个搜索请求,会把请求发送到所有的 Primary Shard 上去执行,因为每个 Shard 都包含部分数据,所以每个 Shard 上都可能会包含搜索请求的结果。


但是如果 Primary Shard 有 Replica Shard,那么请求也可以发送到 Replica Shard 上。

Index boost


When searching multiple indices, you can use the indices_boost parameter to boost results from one or more specified indices. This is useful when hits coming from some indices matter more than hits from other.


GET /_search{  "indices_boost": [    { "my-index-000001": 1.4 },    { "my-index-000002": 1.3 }    ]}
GET /_search{ "indices_boost": [ { "my-alias": 1.4 }, { "my-index*": 1.3 } ]}
复制代码
Multi-target syntax


Most APIs that accept a <data-stream>, <index>, or <target> request path parameter also support multi-target syntax.


In multi-target syntax, you can use a comma-separated list to run a request on multiple resources, such as data streams, indices, or index aliases: test1,test2,test3. You can also use glob-like wildcard () expressions to target resources that match a pattern: test or *test or te*t or test.


You can exclude targets using the - character: test*,-test3.


发布于: 2021 年 02 月 06 日阅读数: 16
用户头像

escray

关注

Let's Go 2017.11.19 加入

在学 Elasticsearch 的项目经理

评论

发布
暂无评论
Elasticsearch multi-index 搜索