码迷,mamicode.com
首页 > Web开发 > 详细

Elasticsearch-PHP 索引操作(转)

时间:2016-07-19 16:53:42      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:

索引操作

本节通过客户端来介绍一下索引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]   = 3;
$indexParams[body][settings][number_of_replicas] = 2;

// 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 => 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配置可以现实当前的一个或多个索引的信息:

// 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 索引操作(转)

标签:

原文地址:http://www.cnblogs.com/sandea/p/5685347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!