write down,forget
adidas eqt support ultra primeknit vintage white coming soon adidas eqt support ultra boost primeknit adidas eqt support ultra pk vintage white available now adidas eqt support ultra primeknit vintage white sz adidas eqt support ultra boost primeknit adidas eqt adv support primeknit adidas eqt support ultra boost turbo red white adidas eqt support ultra boost turbo red white adidas eqt support ultra boost turbo red adidas eqt support ultra whiteturbo adidas eqt support ultra boost off white more images adidas eqt support ultra boost white tactile green adidas eqt support ultra boost beige adidas eqt support ultra boost beige adidas eqt support refined camo drop adidas eqt support refined camo drop adidas eqt support refined running whitecamo adidas eqt support 93 primeknit og colorway ba7506 adidas eqt running support 93 adidas eqt support 93

Diving Into ElasticSearch(10)精确控制之Routing使用

<Category: Diving Into ElasticSearch> 查看评论

前面一篇介绍parent-child的使用,我们来回顾一下:

1.先建好mapping和索引几条数据

2.获取一下这几条数据看看

结果:

没有问题,我们再试试后面的

结果:

嘿嘿,发现了么,居然是404,你可以继续试试后面的id为3的也是404,id为4的可以出来

试试:http://localhost:9200/news/comment/2?parent=1(索引时的path)

哈哈,貌似不行o.(ps:其实kimchy可以实现这个url pattern,但是目前没有)

那正确的方式是怎样的呢?

答案就在routing,ES帮助:http://www..org/guide/reference/mapping/routing-field.html

使用我写的partial_update插件也是支持routing的,如下:

结果:

发散一下,parent=2试试:

结果:

很明细,/news/comment/4存在两条记录,routing的出现,使ES的id的唯一性丢失了,并且删除索引记录的时候也必须带上routing才行,此外,查询的结果中可能会出现重复的_id。

再看看查询的操作,查询的时候可以指定routing,默认不区分routing,即全部扫描:

总之,一旦你决定使用routing,你必须保证对这些routing做到心中有数。

补充一下:
什么是routing,为什么用routing,正常情况下,索引是根据type和id通过hash取模的方式来存储到不同的shard里面的,查询的时候则是在整个shard组里面做的,即每个shard都要参与查询,然后合并各个查询结果,想想,如果shard多了之后,其实有些shard里面可能根本就没有我们需要的数据,这样就浪费了很多不必要的查询操作,routing就是可以按照一定的规则,建索引的时候,就可以指定数据存放在哪个shard里面,这样查询的时候,同理,通过routing规则就能够保证有的放矢,只在一个shard里面去进行查询,而不是到处撒网,这样不就快多了吗?当然用routing也有缺点,由于索引存放位置由我们自己控制,并且由于routing值不均匀,肯定会造成索引数据不均匀,即某几个shard里面什么数据也没有,某几个shard里面数据扎堆,数据扎堆的shard肯定对性能有影响,so,怎么用,自己决定!

本文来自: Diving Into ElasticSearch(10)精确控制之Routing使用