• Elasticsearch-PHP 索引操作(转)


    索引操作

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

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

    创建一个索引

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

    $client = new ElasticsearchClient();
    $indexParams['index'] = 'my_index'; //index

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

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

    $client = new ElasticsearchClient();
    $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()->

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

  • 相关阅读:
    JQuery OOP 及 OOP思想的简易理解
    windows下编写shell脚本执行错误
    Kafka常用命令
    OffsetDateTime工具类
    windows下安装consul
    磁盘阵列方案
    shell基本语法记录
    学习CGLIB与JDK动态代理的区别
    Spring源码分析-BeanFactoryPostProcessors 应用之 PropertyPlaceholderConfigurer
    局域网内搭建git
  • 原文地址:https://www.cnblogs.com/sandea/p/5685347.html
Copyright © 2020-2023  润新知