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

前面一篇介绍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.elasticsearch.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(9)Parent-Child特性使用

介绍下ElasticSearch里Parent-Child特性的使用。 //首先创建一系列新闻的索引,这里我们将hot类型作为parent-chid关系里面的parent。

git push与分支操作

Diving Into ElasticSearch(8)Mapping&Schema

前面应该介绍过ES是Schema Free,但是Schema Free不是说没有Schema,和Solr一样,ElasticSearch也可以设置document的schema,ES里的名字叫Mapping,其实无非就是设置document包含哪些Field,然后对每一个Field个性化的设置索引类型,是否存储,以及设置索引分析器和查询使用的分析器,Es和Solr相比有一个我认为最好的特性:就是支持Object类型,你可以像操作对象一样对对象的某个属性进行索引和查询,简单演示如下:

how to use dottrace’s remote debugging

加参数 /console 启动,每次输入phrase来进行验证,或者使用目标系统的用户来登录 或者安装成服务,但是服务的方式就不能使用phrase来进行验证了。 windows7下正常连接调试器,但是windows2008R2+IIS7调试器连接失败,据小马哥说重启之后好使了,未试过。

This header must be modified using the appropriate property

  You can see above that copying the headers collection from one request into another is going to cause the problem.  The following is a list of request and response headers that must be set via properties instead of […]

godaddy+qeephp的rewrite配置

不知道什么原因,godaddy服务器抽风,php环境变量的doc_root及temp变量的路径和实际的路径对应不上,另外rewrite也出问题。 N年不玩qeephp,折腾了一会,记录一下: 根目录修改php.ini

qeephp配置文件/config/environment.yaml里 url_mode确保为rewrite

站点根目录.htaccess

ElasticSearch插件发布:PartialUpdate

地址:https://github.com/medcl/ElasticSearch.PartialUpdate 是否碰到过因为需要修改索引中某个字段,而需要将整个索引文档进行重建,是不是很麻烦啊,昨天弄了个插件,就是方便索引文档局部更新的,使用说明如下: 1.先下载插件,解压到ES的plugin目录: elasticsearch/plguin/es-partial-update/ 2.试一把 先索引一个文档吧

执行修改操作,添加一个字段,修改一个字段

看看修改之后的结果吧

Diving Into ElasticSearch (6) 配置文件elasticsearch.yml

接前面那篇吧[5],ElasticSearch分布式架构要说清楚真不是那么容易,我那就从细节一点点的切入吧。 先看看配置文件吧:elasticsearch.yml

配置文件elasticsearch.yml的可配项比较多,并且修改之后需要重启服务才能生效。