Elasticsearch 8.5.3 源码分析(2)——TransportAction 映射和分片路由模型
2023-11-27 18:51:15
理解 TransportAction 映射
TransportAction 是一个接口,它定义了在传输层上执行操作的方法。TransportAction 的实现类负责将传入的请求映射到适当的节点,并在该节点上执行请求。
在 Elasticsearch 中,TransportAction 映射是通过使用 ActionName 注解来完成的。ActionName 注解指定了与该操作关联的操作名称。例如,在 TransportSearchAction 类中,ActionName 注解指定了操作名称为 "indices:data/read/search"。
当请求到达传输层时,它将被路由到适当的 TransportAction 实现类。TransportAction 实现类会使用 ActionName 注解来确定操作名称,然后使用该操作名称来查找与该操作关联的 TransportRequestHandler。
TransportRequestHandler 是一个接口,它定义了如何处理传入请求的方法。TransportRequestHandler 的实现类负责执行请求并返回响应。
在 Elasticsearch 中,TransportRequestHandler 通常是一个内部类,它位于 TransportAction 实现类中。例如,在 TransportSearchAction 类中,TransportSearchRequestHandler 是一个内部类,它负责处理搜索请求。
理解分片路由模型
分片路由模型是 Elasticsearch 用于确定要执行请求的分片的数据结构。分片路由模型包含有关集群中所有分片的元数据,例如分片的 ID、主分片所在的节点、副本分片所在的节点等。
在 Elasticsearch 中,分片路由模型是通过使用 RoutingTable 类来实现的。RoutingTable 类包含有关集群中所有分片的路由信息。
当请求到达传输层时,它将被路由到适当的 TransportAction 实现类。TransportAction 实现类会使用 RoutingTable 类来确定要执行请求的分片。
使用 Elasticsearch REST API 执行搜索操作
要使用 Elasticsearch REST API 执行搜索操作,您可以使用以下步骤:
- 创建一个 HTTP 请求。请求的 URL 应为 "http://localhost:9200/_search"。
- 在请求体中,指定要执行的搜索查询。搜索查询是一个 JSON 对象,它包含要搜索的字段、要使用的搜索条件等信息。
- 将请求发送到 Elasticsearch 集群。
- Elasticsearch 集群会处理请求并返回响应。响应是一个 JSON 对象,它包含搜索结果。
示例
以下是一个使用 Elasticsearch REST API 执行搜索操作的示例:
curl -XGET "http://localhost:9200/_search" -H 'Content-Type: application/json' -d'{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}'
这个请求将搜索包含 "Elasticsearch" 一词的文档。
结论
TransportAction 映射和分片路由模型是 Elasticsearch 中两个重要的概念。TransportAction 映射用于将传输层请求映射到适当的节点,而分片路由模型用于确定要执行请求的分片。理解这两个概念对于理解 Elasticsearch 的工作原理非常重要。