zoukankan      html  css  js  c++  java
  • PHP操作Elasticsearch

    点击上方“ 码农编程进阶笔记 ”,选择“置顶或者星标

    文末有干货,每天定时与您相约!

    一、安装

    以下es基于6.4

    1、在 composer.json 文件中引入 elasticsearch-php:

    {
        "require":{
            "elasticsearch/elasticsearch":"~6.0",
            "monolog/monolog": "~1.0"
        }
    }

    2、用 composer 安装客户端:

    curl -s http://getcomposer.org/installer | php
    php composer.phar install --no-dev

    二、快速开始

    1、创建一个test.php文件,内容如下

    <?php
    require 'vendor/autoload.php';
    
    use Elasticsearch\ClientBuilder;
    
    
    $hosts = [
        '192.168.16.241:9200',         // IP + Port
        '192.168.16.241',              // Just IP
        'localhost:9200', // Domain + Port
        'localhost',     // Just Domain
        'http://localhost',        // SSL to localhost
        'https://192.168.16.241:9200'  // SSL to IP + Port
    ];
    $client = ClientBuilder::create()->setHosts($hosts)->build();            // Instantiate a new ClientBuilder  // Set the hosts
    
    
    $params = [
        'index'  => 'test_data',
        'type'   => 'users',
        'id'     => 100027,
        'client' => [ 'ignore' => 404 ]
    ];
    var_dump( $client->get($params));

    2、浏览器访问test.php,结果如下(前提是你的es已经有数据)

    三、基本操作

    1、创建索引

    $params = [
        'index' => 'test_index'
    ];
    
    // Create the index
    print_r($client->indices()->create($params));

    2、创建索引(指定模板)

    $params = [
        'index' => 'test_index',
        'div' => [
            'settings' => [
                'number_of_shards' => 5,
                'number_of_replicas' => 2
            ],
            'mappings' => [
                'test_type' => [
                    '_source' => [
                        'enabled' => true
                    ],
                    'properties' => [
                        'name' => [
                            'type' => 'text',
                            'analyzer' => 'ik_max_word'
                        ],
                        'age' => [
                            'type' => 'integer'
                        ]
                    ]
                ]
            ]
        ]
    ];
    // Create the index with mappings and settings now
    print_r($client->indices()->create($params));

    3、删除索引、

    $params = ['index' => 'test_index'];
    print_r($client->indices()->delete($params));

    4、更改索引的配置参数:

    $params = [
        'index' => 'test_index',
        'div' => [
            'settings' => [
                'number_of_replicas' => 0,
                'refresh_interval' => -1
            ]
        ]
    ];
    
    print_r($client->indices()->putSettings($params));

    5、获取一个或多个索引的当前配置参数

    $params = [
        'index' => [ 'test_index', 'test_data' ]
    ];
    print_r($client->indices()->getSettings($params));

    6、更改或增加一个索引的映射

    $params = [
        'index' => 'test_index',
        'type' => 'test_type',
        'div' => [
            'test_type' => [
                '_source' => [
                    'enabled' => true
                ],
                'properties' => [
                    'name' => [
                        'type' => 'text',
                        'analyzer' => 'ik_max_word'
                    ],
                    'age' => [
                        'type' => 'integer'
                    ],
                    'createtime' => [
                        'type' => 'date'  //加了一个时间
                    ]
    
                ]
            ]
        ]
    ];
    
    // Update the index mapping
    print_r($client->indices()->putMapping($params));

    7、返回索引和类型的映射细节

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

    8、索引一个文档(提供id,则会更新对应id的记录。若没有提供,则会生成一条文档)

    $params = [
        'index' => 'test_data',
        'type' => 'users',
        'id' => '100027',
        'div' => [ 'nickname' => 'update222']
    ];
    
    // Document will be indexed to my_index/my_type/my_id
    print_r($client->index($params));

    9、获取文档

    $params = [
        'index' => 'test_data',
        'type' => 'users',
        'id' => '100027'
    ];
    
    // Get doc at /my_index/my_type/my_id
    print_r($client->get($params));

    10、更新文档 (doc指定要更新的字段内容)

    $params = [
        'index' => 'test_data',
        'type' => 'users',
        'id' => '100027',
        'div' => [
            'doc' => [
                'nickname' => 'abc',
                'mobile' => '13800138000'
            ]
        ]
    ];
    // Update doc at /my_index/my_type/my_id
    print_r($client->update($params));

    11、执行一个脚本进行更新,对某个字段的数据进行拼接或自增

    $params = [
        "index" => "test_data",
        "type" => "users",
        "id" => "100027",
        "div" => [
            "script" => "ctx._source.nickname += 'hahh'"
        ]
    ];
    
    print_r($client->update($params));

    12、删除文档

    $params = [
        'index' => 'test_data',
        'type' => 'users',
        'id' => '100027'
    ];
    
    // Delete doc at /my_index/my_type/my_id
    print_r($client->delete($params));

    13、搜索内容

    $json = '{
        "query" : {
            "match" : {
                "id" : "100073"
            }
        }
    }';
    
    $params = [
        'index' => 'test_data',
        'type' => 'users',
        'div' => $json
    ];
    print_r($client->search($params));
    
    
    $params = [
        'index' => 'test_data',
        'type' => 'users',
        'div' => [
            'query' => [
                'bool' => [
                    'should' => [
                        [ 'match' => [ 'nickname' => [
                            'query' => 'user440032',
                            'boost' => 3, // 权重大
                        ]]]
                    ],
                ],
            ],
            'sort' => ['id'=>['order'=>'desc']]     //排序   分页
            , 'from' => 0, 'size' => 10
        ]
    ];
    
    print_r($client->search($params));

    在公众号后台回复"进群"关键字,即可免费加入高大上的互联网后端技术交流微信群。(公众号主免进!) 

    往日精选文章

    PHP 面试踩过的坑

    PHP 面试踩过的坑(二)

    PHP 面试踩过的坑(三)

    5G时代必备技能 音视频WebRTC实时互动直播技术入门与实战

  • 相关阅读:
    一. js高级(1)-面向对象编程
    tips01- 定位
    h5c3 part6 flex
    h5c3 part5 background and transform
    template and pagination
    h5c3 part4
    h5c3 part3
    h5c3 part2
    h5c3 part1
    学习博客
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452881.html
Copyright © 2011-2022 走看看