<>1. 概述

先说明此参数在使用一些高级的ES的特性的时候,经常用到,请认真理解。

文档在索引中利用下面的公式路由到特定的分片:shard_num = hash(_routing) % num_primary_shards,_routing
字段的默认值使用的文档的_id字段。如果存在父文档,则使用文档的_parent编号。

可以通过为每个文档指定一个自定义的路由值来实现自定义的路由方式。

<>2. 示例与理解

mappping定义和数据插入
PUT example PUT example/docs/_mapping { "properties": { "id": {"type":
"long"}, "name": {"type": "text"} } } #本文档使用user1其路由值代替其ID。与此同时,获取,删除或更新
文档routing时,需要提供相同的值 PUT example/docs/1?routing=user1 { "id":1, "name":
"username1" }
查询

_routing字段可以在查询、聚合、脚本以及排序的时候访问。如下:
PUT example PUT example/docs/_mapping { "properties": { "id": {"type":
"long"}, "name": {"type": "text"} } } PUT example/docs/1?routing=user1 {
"id":1, "name": "username1" } PUT example/docs/2?routing=user1 { "id":2,
"name": "username2" } PUT example/docs/3?routing=user2 { "id":3, "name":
"username3" } #查询 GET example/docs/_search { "query": { "terms": { "_routing":
['user1'] } }, "aggs": { "Routing values": { "terms": { "field": "_routing",
"size": 10 } } }, "sort": [ { "_routing": { "order": "desc" } } ],
"script_fields": { "Routing values": { "script": { "source": "doc['_routing']"
} } } }
作用

* 自定义路由可以降低搜索压力。搜索请求可以仅仅发送到匹配指定的路由值的分片,而不是广播到全部的分片。如下查询就是广播到所有分片的查询: GET
example/docs/_search?routing=user1,user2 { "query": { "match_all": {} } }

当我们使用自定义路由时,响应的文档的查询,删除或修改文档,都需要提供路由值,而忘记路由值会导致许多不必要的麻烦。而ES也提供了设置,把routing字段作为一个必须传递的参数的配置。

其他的一些高级特性我们将在后续进行讲解。

技术
©2020 ioDraw All rights reserved
Vue2.0+jsonserver+axios模拟本地请求接口数据django不关闭CSRF中间件,自定义通过CSRF检测的post请求网上赚钱的门路方法,大部分人都是利用这三种方法!JS基础重点知识实验总结(全)HashMap实现LRU(最近最少使用)缓存更新算法特征工程vue el-input 禁止输入特殊字符 只可输入数字 正则验证抖音比较火的 黑客帝国-代码雨(免费送)携程2019校招 LRU Cachek8s删除pod