MST

星途 面试题库

面试题:ElasticSearch中GET API里路由参数的基本应用场景

在ElasticSearch的GET API中,路由参数主要用于哪些常见场景?请举例说明如何通过路由参数提高查询效率。
10.4万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

常见场景

  1. 数据分区与隔离:当数据按照某种业务逻辑进行分区存储时,通过路由参数可以快速定位到特定分区的数据。例如,电商系统中,不同地区的订单数据分别存储在不同的节点上,通过地区编码作为路由参数,可直接查询特定地区的订单。
  2. 提高写入性能:在写入数据时指定路由参数,可使数据均匀分布到不同节点,避免数据倾斜。比如,以用户ID的哈希值作为路由参数写入用户相关数据,确保数据分散存储。
  3. 多租户应用:不同租户的数据可通过路由参数进行隔离。每个租户有自己的路由标识,查询时指定租户的路由,只获取该租户的数据。

提高查询效率示例

假设我们有一个博客系统,文章按作者ID进行分区存储。每个作者的文章存储在特定的节点上。

  1. 创建索引并设置路由
PUT /blog_index
{
    "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
    },
    "mappings": {
        "properties": {
            "title": { "type": "text" },
            "content": { "type": "text" },
            "author_id": { "type": "keyword" }
        }
    }
}
  1. 写入数据时指定路由
POST /blog_index/_doc?routing=123
{
    "title": "Elasticsearch Routing Example",
    "content": "This is an example of using routing in Elasticsearch",
    "author_id": "123"
}
  1. 查询时指定路由
GET /blog_index/_doc/[document_id]?routing=123

通过在查询时指定路由参数routing=123,Elasticsearch 无需在所有分片上查找,直接定位到存储作者ID为123文章的分片,大大提高了查询效率。对于范围查询等,同样可以通过路由快速定位到相关分片,减少不必要的查询开销。