Elasticsearch-PHP 索引操作

索引操作

本节通过客户端来介绍一下索引API的各种操作。索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等)。

我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法。REST API的参数是相同的,所以它应该很容易执行你所需要的操作。

创建一个索引

索引操作都包含在一个独特的命名空间中,和根对象上的方法区分开。举个例子,让我们创建一个索引:

 
  1. $client = new ElasticsearchClient();  
  2. $indexParams['index']  = 'my_index';    //index  
  3.   
  4. $client->indices()->create($indexParams);  


当然,你可以指定任何通常会被包含在一个新索引创建API的参数。所有参数通常会在请求体,位于请求体的关联数组:

 
  1. $client = new ElasticsearchClient();  
  2. $indexParams['index']  = 'my_index';  
  3.   
  4. // Index Settings  
  5. $indexParams['body']['settings']['number_of_shards']   = 3;  
  6. $indexParams['body']['settings']['number_of_replicas'] = 2;  
  7.   
  8. // Example Index Mapping  
  9. $myTypeMapping = array(  
  10.     '_source' => array(  
  11.         'enabled' => true  
  12.     ),  
  13.     'properties' => array(  
  14.         'first_name' => array(  
  15.             'type' => 'string',  
  16.             'analyzer' => 'standard'  
  17.         ),  
  18.         'age' => array(  
  19.             'type' => 'integer'  
  20.         )  
  21.     )  
  22. );  
  23. $indexParams['body']['mappings']['my_type'] = $myTypeMapping;  
  24.   
  25. // Create the index  
  26. $client->indices()->create($indexParams);  

创建一个索引(高级例子)

这是一个更加复杂的创建索引的例子,展示如何定义分析,分词器、过滤器和索引设置。虽然本质上和前面的例子相同,但更复杂的例子可以帮助“现实世界”的客户使用,因为这个特殊的语法很容易陷入困境。

为简便起见,给出的例子是使用PHP 5.4+版本短数组语法([]而不是array())

  1. $params = [  
  2.     'index' => 'reuters',  
  3.     'body' => [  
  4.         'settings' => [ // 顶级设置包含关于索引(分片等)和分析器的配置  
  5.             'number_of_shards' => 1,  
  6.             'number_of_replicas' => 0,  
  7.             'analysis' => [ // 分析嵌套设置,包含分词器、过滤器、字符过滤器和分析器  
  8.                 'filter' => [  
  9.                     'shingle' => [  
  10.                         'type' => 'shingle'  
  11.                     ]  
  12.                 ],  
  13.                 'char_filter' => [  
  14.                     'pre_negs' => [  
  15.                         'type' => 'pattern_replace',  
  16.                         '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',  
  17.                         'replacement' => '~$1 $2'  
  18.                     ],  
  19.                     'post_negs' => [  
  20.                         'type' => 'pattern_replace',  
  21.                         '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+)',  
  22.                         'replacement' => '$1 ~$2'  
  23.                     ]  
  24.                 ],  
  25.                 'analyzer' => [  
  26.                     'reuters' => [  
  27.                         'type' => 'custom',  
  28.                         'tokenizer' => 'standard',  
  29.                         'filter' => ['lowercase', 'stop', 'kstem']  
  30.                     ]  
  31.                 ]  
  32.             ]  
  33.         ],  
  34.         'mappings' => [ // 映射是另外一个嵌套在body中的顶级元素,包含各种类型的映射  
  35.             '_default_' => [ // 默认类型是动态模版,应用于任何没有明确配置的字段  
  36.                 'properties' => [  
  37.                     'title' => [  
  38.                         'type' => 'string',  
  39.                         'analyzer' => 'reuters',  
  40.                         'term_vector' => 'yes',  
  41.                         'copy_to' => 'combined'  
  42.                     ],  
  43.                     'body' => [  
  44.                         'type' => 'string',  
  45.                         'analyzer' => 'reuters',  
  46.                         'term_vector' => 'yes',  
  47.                         'copy_to' => 'combined'  
  48.                     ],  
  49.                     'combined' => [  
  50.                         'type' => 'string',  
  51.                         'analyzer' => 'reuters',  
  52.                         'term_vector' => 'yes'  
  53.                     ],  
  54.                     'topics' => [  
  55.                         'type' => 'string',  
  56.                         'index' => 'not_analyzed'  
  57.                     ],  
  58.                     'places' => [  
  59.                         'type' => 'string',  
  60.                         'index' => 'not_analyzed'  
  61.                     ]  
  62.                 ]  
  63.             ],  
  64.             'my_type' => [ // my_type类型是一个用户自定义的类型,包含一个my_field字段  
  65.                 'properties' => [  
  66.                     'my_field' => [  
  67.                         'type' => 'string'  
  68.                     ]  
  69.                 ]  
  70.             ]  
  71.         ]  
  72.     ]  
  73. ];  
  74. $client->indices()->create($params);  

删除一个索引

删除索引是非常简单的:

 
  1. $deleteParams['index'] = 'my_index';  
  2. $client->indices()->delete($deleteParams);  

设置API配置

API设置允许你动态地修改任何索引配置:

 
  1. $params['index'] = 'my_index';  
  2. $params['body']['index']['number_of_replicas'] = 0;  
  3. $params['body']['index']['refresh_interval'] = -1;  
  4.   
  5. $ret = $client->indices()->putSettings($params);  

获取API配置

获取APi配置可以现实当前的一个或多个索引的信息:

  

  1. // Get settings for one index  
  2. $params['index'] = 'my_index';  
  3. $ret = $client->indices()->getSettings($params);  
  4.   
  5. // Get settings for several indexes  
  6. $params['index'] = array('my_index', 'my_index2');  
  7. $ret = $client->indices()->getSettings($params);  

设置API映射

设置API映射允许你修改或添加一个以存在的索引映射

 
  1. // Set the index and type  
  2. $params['index'] = 'my_index';  
  3. $params['type']  = 'my_type2';  
  4.   
  5. // Adding a new type to an existing index  
  6. $myTypeMapping2 = array(  
  7.     '_source' => array(  
  8.         'enabled' => true  
  9.     ),  
  10.     'properties' => array(  
  11.         'first_name' => array(  
  12.             'type' => 'string',  
  13.             'analyzer' => 'standard'  
  14.         ),  
  15.         'age' => array(  
  16.             'type' => 'integer'  
  17.         )  
  18.     )  
  19. );  
  20. $params['body']['my_type2'] = $myTypeMapping2;  
  21.   
  22. // Update the index mapping  
  23. $client->indices()->putMapping($params);  

获取API映射

获取API映射会返回关于索引和类型的详细信息。根据你希望检索的映射,你可以指定索引和类型的组合数目:

 
  1. // Get mappings for all indexes and types  
  2. $ret = $client->indices()->getMapping();  
  3.   
  4. // Get mappings for all types in 'my_index'  
  5. $params['index'] = 'my_index';  
  6. $ret = $client->indices()->getMapping($params);  
  7.   
  8. // Get mappings for all types of 'my_type', regardless of index  
  9. $params['type'] = 'my_type';  
  10. $ret = $client->indices()->getMapping($params);  
  11.   
  12. // Get mapping 'my_type' in 'my_index'  
  13. $params['index'] = 'my_index';  
  14. $params['type']  = 'my_type'  
  15. $ret = $client->indices()->getMapping($params);  
  16.   
  17. // Get mappings for two indexes  
  18. $params['index'] = array('my_index', 'my_index2');  
  19. $ret = $client->indices()->getMapping($params);  

在索引命名空间中的其他API

在索引命名空间中还有其他一定数量的API允许你管理elasticsearch 的索引(添加删除模版、刷新段、关闭索引等)。

如果你使用IDE自动匹配时,你能够轻松的键入命名空间:

 
  1. $client->indices()->  

仔细阅读列表中可用的方法。查看 ElasticsearchNamespacesIndices.php 文件,会显示一个完整的可用的方法列表(以及参数列表和注释)。

原文地址:https://www.cnblogs.com/crystaltu/p/7657331.html