索引操作

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

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

创建一个索引

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

$client = new Elasticsearch\Client();
$indexParams['index'] = 'my_index'; //index

$client->indices()->create($indexParams);

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

$client = new Elasticsearch\Client();
$indexParams['index'] = 'my_index'; // Index Settings
$indexParams['body']['settings']['number_of_shards'] = ;
$indexParams['body']['settings']['number_of_replicas'] = ; // Example Index Mapping
$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; // Create the index
$client->indices()->create($indexParams);

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

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

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

$params = [
'index' => 'reuters',
'body' => [
'settings' => [ // 顶级设置包含关于索引(分片等)和分析器的配置
'number_of_shards' => ,
'number_of_replicas' => ,
'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'] = ;
$params['body']['index']['refresh_interval'] = -; $ret = $client->indices()->putSettings($params);

获取API配置

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

// Get settings for one index
$params['index'] = 'my_index';
$ret = $client->indices()->getSettings($params); // Get settings for several indexes
$params['index'] = array('my_index', 'my_index2');
$ret = $client->indices()->getSettings($params);

设置API映射

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

// Set the index and type
$params['index'] = 'my_index';
$params['type'] = 'my_type2'; // Adding a new type to an existing index
$myTypeMapping2 = array(
'_source' => array(
'enabled' => true
),
'properties' => array(
'first_name' => array(
'type' => 'string',
'analyzer' => 'standard'
),
'age' => array(
'type' => 'integer'
)
)
);
$params['body']['my_type2'] = $myTypeMapping2; // Update the index mapping
$client->indices()->putMapping($params);

获取API映射

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

// Get mappings for all indexes and types
$ret = $client->indices()->getMapping(); // Get mappings for all types in 'my_index'
$params['index'] = 'my_index';
$ret = $client->indices()->getMapping($params); // Get mappings for all types of 'my_type', regardless of index
$params['type'] = 'my_type';
$ret = $client->indices()->getMapping($params); // Get mapping 'my_type' in 'my_index'
$params['index'] = 'my_index';
$params['type'] = 'my_type'
$ret = $client->indices()->getMapping($params); // Get mappings for two indexes
$params['index'] = array('my_index', 'my_index2');
$ret = $client->indices()->getMapping($params);

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

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

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

$client->indices()->

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

Elasticsearch-PHP 索引操作(转)的更多相关文章

  1. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  2. elasticsearch的索引操作和文档操作总结

    参考文档:https://es.xiaoleilu.com/010_Intro/00_README.html 一.索引操作 1.查看当前节点的所有的index 查看当前节点的所有的index [roo ...

  3. ElasticSearch+Kibana 索引操作( 附源码)

    一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elastics ...

  4. elasticsearch java 索引操作

    1.添加maven依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>el ...

  5. elasticsearch的索引操作

    1.创建索引(test_index) curl -XPUT "http://192.168.99.1:9200/test_index" 2.创建索引,指定分片和副本的数量 curl ...

  6. Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查

    今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...

  7. ElasticSearch 基本概念 and 索引操作 and 文档操作 and 批量操作 and 结构化查询 and 过滤查询

    基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...

  8. Elasticsearch——多索引的使用

    在Elasticsearch中,一般的查询都支持多索引. 只有文档API或者别名等不支持多索引操作,因此本篇就翻译一下多索引相关的内容. 首先,先插入几条数据: $ curl -XPOST local ...

  9. Elasticsearch多索引

     在Elasticsearch中,一般的查询都支持多索引.只有文档API或者别名API等不支持多索引操作,因此本篇就翻译一下多索引相关的内容. 首先,先插入几条数据: $ curl -XPOST lo ...

随机推荐

  1. MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过非 ButtonBase 触发命令

    介绍背水一战 Windows 10 之 MVVM(Model-View-ViewModel) 通过 Binding 或 x:Bind 结合 Command 实现,通过非 ButtonBase 触发命令 ...

  2. Java多线程与并发库高级应用-线程池

    线程池 线程池的思想  线程池的概念与Executors类的应用 > 创建固定大小的线程池 > 创建缓存线程池 > 创建单一线程池(如何实现线程死掉后重新启动?) 关闭线程池 > ...

  3. bzoj 3196 树套树模板

    然而我还是在继续刷水题... 终于解开了区间第k大的心结... 比较裸的线段树套平衡树,比较不好想的是求区间第k大时需要二分一下答案,然后问题就转化为了第一个操作.复杂度nlog3n.跑的比较慢... ...

  4. 【BZOJ-2521】最小生成树 最小割

    2521: [Shoi2010]最小生成树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 415  Solved: 242[Submit][Statu ...

  5. 【BZOJ-3638&3272&3267&3502】k-Maximum Subsequence Sum 费用流构图 + 线段树手动增广

    3638: Cf172 k-Maximum Subsequence Sum Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 174  Solved: 9 ...

  6. GCD XOR, ACM/ICPC Dhaka 2013, UVa12716

    不同的枚举方法,效率完全不同.值得记录一下! #include <cstdio> #include <cstring> , count = ; ]; void pre() { ...

  7. Python 循环判断和数据类型

    循环和判断 1.if 形式 if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_ ...

  8. Jboss7.1 加入realm auth认证 bootsfaces 美化的登录页面

    jboss-as-7.1.1.Final\standalone\configuration: 1, standalone.xml中 <security-domains>标签里面添加: &l ...

  9. C#调用WebService实现天气预报

    http://zhangkui.blog.51cto.com/1796259/497324/ 本文使用Winform (C#)调用互联网上公开的WebServices(http://www.webxm ...

  10. 修改nginx的访问目录以及遇到的403错误修改总结

    对于这个问题困扰了我好几天,前篇文章介绍了图片服务器的使用,但是两个服务器如何进行通话访问呢,即如何通过nginx来访问ftp服务器上的资源文件呢,这里面需要修改nginx的配置文件(vi /usr/ ...