索引操作
本节通过客户端来介绍一下索引API的各种操作。索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等)。
我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法。REST API的参数是相同的,所以它应该很容易执行你所需要的操作。
创建一个索引
索引操作都包含在一个独特的命名空间中,和根对象上的方法区分开。举个例子,让我们创建一个索引:
- $client=newElasticsearch\Client();
- $indexParams[‘index‘]=‘my_index‘;//index
- $client->indices()->create($indexParams);
当然,你可以指定任何通常会被包含在一个新索引创建API的参数。所有参数通常会在请求体,位于请求体的关联数组:
- $client=newElasticsearch\Client();
- $indexParams[‘index‘]=‘my_index‘;
- //IndexSettings
- $indexParams[‘body‘][‘settings‘][‘number_of_shards‘]=3;
- $indexParams[‘body‘][‘settings‘][‘number_of_replicas‘]=2;
- //ExampleIndexMapping
- $myTypeMapping=array(
- ‘_source‘=>array(
- ‘enabled‘=>true
- ),
- ‘properties‘=>array(
- ‘first_name‘=>array(
- ‘type‘=>‘string‘,
- ‘analyzer‘=>‘standard‘
- ),
- ‘age‘=>array(
- ‘type‘=>‘integer‘
- )
- )
- );
- $indexParams[‘body‘][‘mappings‘][‘my_type‘]=$myTypeMapping;
- //Createtheindex
- $client->indices()->create($indexParams);
创建一个索引(高级例子)
这是一个更加复杂的创建索引的例子,展示如何定义分析,分词器、过滤器和索引设置。虽然本质上和前面的例子相同,但更复杂的例子可以帮助“现实世界”的客户使用,因为这个特殊的语法很容易陷入困境。
为简便起见,给出的例子是使用PHP 5.4+版本短数组语法([]而不是array())
- $params=[
- ‘index‘=>‘reuters‘,
- ‘body‘=>[
- ‘settings‘=>[//顶级设置包含关于索引(分片等)和分析器的配置
- ‘number_of_shards‘=>1,
- ‘number_of_replicas‘=>0,
- ‘analysis‘=>[//分析嵌套设置,包含分词器、过滤器、字符过滤器和分析器
- ‘filter‘=>[
- ‘shingle‘=>[
- ‘type‘=>‘shingle‘
- ]
- ],
- ‘char_filter‘=>[
- ‘pre_negs‘=>[
- ‘type‘=>‘pattern_replace‘,
- ‘pattern‘=>‘(\\w+)\\s+((?i:never|no|nothing|nowhere|noone|none|not|havent|hasnt|hadnt|cant|couldnt|shouldnt|wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint))\\b‘,
- ‘replacement‘=>‘~$1$2‘
- ],
- ‘post_negs‘=>[
- ‘type‘=>‘pattern_replace‘,
- ‘pattern‘=>‘\\b((?i:never|no|nothing|nowhere|noone|none|not|havent|hasnt|hadnt|cant|couldnt|shouldnt|wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint))\\s+(\\w+)‘,
- ‘replacement‘=>‘$1~$2‘
- ]
- ],
- ‘analyzer‘=>[
- ‘reuters‘=>[
- ‘type‘=>‘custom‘,
- ‘tokenizer‘=>‘standard‘,
- ‘filter‘=>[‘lowercase‘,‘stop‘,‘kstem‘]
- ]
- ]
- ]
- ],
- ‘mappings‘=>[//映射是另外一个嵌套在body中的顶级元素,包含各种类型的映射
- ‘_default_‘=>[//默认类型是动态模版,应用于任何没有明确配置的字段
- ‘properties‘=>[
- ‘title‘=>[
- ‘type‘=>‘string‘,
- ‘analyzer‘=>‘reuters‘,
- ‘term_vector‘=>‘yes‘,
- ‘copy_to‘=>‘combined‘
- ],
- ‘body‘=>[
- ‘type‘=>‘string‘,
- ‘analyzer‘=>‘reuters‘,
- ‘term_vector‘=>‘yes‘,
- ‘copy_to‘=>‘combined‘
- ],
- ‘combined‘=>[
- ‘type‘=>‘string‘,
- ‘analyzer‘=>‘reuters‘,
- ‘term_vector‘=>‘yes‘
- ],
- ‘topics‘=>[
- ‘type‘=>‘string‘,
- ‘index‘=>‘not_analyzed‘
- ],
- ‘places‘=>[
- ‘type‘=>‘string‘,
- ‘index‘=>‘not_analyzed‘
- ]
- ]
- ],
- ‘my_type‘=>[//my_type类型是一个用户自定义的类型,包含一个my_field字段
- ‘properties‘=>[
- ‘my_field‘=>[
- ‘type‘=>‘string‘
- ]
- ]
- ]
- ]
- ]
- ];
- $client->indices()->create($params);
删除一个索引
删除索引是非常简单的:
- $deleteParams[‘index‘]=‘my_index‘;
- $client->indices()->delete($deleteParams);
设置API配置
API设置允许你动态地修改任何索引配置:
- $params[‘index‘]=‘my_index‘;
- $params[‘body‘][‘index‘][‘number_of_replicas‘]=0;
- $params[‘body‘][‘index‘][‘refresh_interval‘]=-1;
- $ret=$client->indices()->putSettings($params);
获取API配置
获取APi配置可以现实当前的一个或多个索引的信息:
- //Getsettingsforoneindex
- $params[‘index‘]=‘my_index‘;
- $ret=$client->indices()->getSettings($params);
- //Getsettingsforseveralindexes
- $params[‘index‘]=array(‘my_index‘,‘my_index2‘);
- $ret=$client->indices()->getSettings($params);
设置API映射
设置API映射允许你修改或添加一个以存在的索引映射
- //Settheindexandtype
- $params[‘index‘]=‘my_index‘;
- $params[‘type‘]=‘my_type2‘;
- //Addinganewtypetoanexistingindex
- $myTypeMapping2=array(
- ‘_source‘=>array(
- ‘enabled‘=>true
- ),
- ‘properties‘=>array(
- ‘first_name‘=>array(
- ‘type‘=>‘string‘,
- ‘analyzer‘=>‘standard‘
- ),
- ‘age‘=>array(
- ‘type‘=>‘integer‘
- )
- )
- );
- $params[‘body‘][‘my_type2‘]=$myTypeMapping2;
- //Updatetheindexmapping
- $client->indices()->putMapping($params);
获取API映射
获取API映射会返回关于索引和类型的详细信息。根据你希望检索的映射,你可以指定索引和类型的组合数目:
- //Getmappingsforallindexesandtypes
- $ret=$client->indices()->getMapping();
- //Getmappingsforalltypesin‘my_index‘
- $params[‘index‘]=‘my_index‘;
- $ret=$client->indices()->getMapping($params);
- //Getmappingsforalltypesof‘my_type‘,regardlessofindex
- $params[‘type‘]=‘my_type‘;
- $ret=$client->indices()->getMapping($params);
- //Getmapping‘my_type‘in‘my_index‘
- $params[‘index‘]=‘my_index‘;
- $params[‘type‘]=‘my_type‘
- $ret=$client->indices()->getMapping($params);
- //Getmappingsfortwoindexes
- $params[‘index‘]=array(‘my_index‘,‘my_index2‘);
- $ret=$client->indices()->getMapping($params);
在索引命名空间中的其他API
在索引命名空间中还有其他一定数量的API允许你管理elasticsearch 的索引(添加删除模版、刷新段、关闭索引等)。
如果你使用IDE自动匹配时,你能够轻松的键入命名空间:
- $client->indices()->
仔细阅读列表中可用的方法。查看 \Elasticsearch\Namespaces\Indices.php 文件,会显示一个完整的可用的方法列表(以及参数列表和注释)。
Elasticsearch-PHP 索引操作
原文地址:http://www.cnblogs.com/crystaltu/p/7657331.html