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));

本文分享自微信公众号 - 码农编程进阶笔记(lxw1844912514),作者:竹子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 操作 ElasticSearch

    SpringBoot 2.3.0 支持 7.6.2版本,但是我不是最新的版本,所以自定义版本:

    wsuo
  • Java操作Elasticsearch

    前两篇对es的操作只是在开发或生产环境中排查问题需要大量使用,最常用的还是在代码中对es的增删改查,下面就来看一下。

    Liusy
  • Go操作Elasticsearch

    常见_youmen
  • PHP Elasticsearch的基本使用方法

    对于Elasticsearch与Elasticsearch-php的安装,网上有比较多的教程,这里不再累述。只是要注意Elasticsearch、Elastic...

    双面人
  • Bughound:一款基于Elasticsearch的静态代码分析工具

    Bughound是一款开源的静态代码分析工具,可以帮助广大研究人员分析自己的代码,并将结果发送至Elasticsearch和Kibana,以更好地审查代码中潜在...

    FB客服
  • Elasticsearch的CRUD操作

    1、添加信息 PUT http://192.168.56.201:9200/demo/employee/1?op_type=create { "first...

    苦咖啡
  • elasticsearch文档操作

    上篇文章向读者介绍了Elasticsearch中修改数据的操作,使用了Elasticsearch提供的一整套强大的REST API,本文继续来看通过这一套API...

    江南一点雨
  • 用 python 操作 elasticsearch

    用 python 操作 elasticsearch 使用的第三方库是 elasticsearch 。

    用户4945346
  • ElasticSearch Java API:Snapshot操作

    https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.8/_snapshot_api...

    HLee
  • ElasticSearch全文检索引擎-使用

    具体的字段意思手册上都有 创建 curl -XPOST "http://ip:port/shop" -d'@createindex.json 这里的sho...

    gaobinzhan
  • Elasticsearch 实战案例(索引切分、模板、别名、数据迁移)

    基于ELK搭建的日志平台,前期匆忙建设过程中一些参数和设计未做过多的考虑,上线后就需要不断根据实际情况做调整,而一些调整限于ELK的一些特性,一旦操作不当就会出...

    高广超
  • Elasticsearch PHP MYSQL的同步使用

    Elasticsearch是一个分布式,RESTful模式的高速搜索引擎,它使用标准的RESTful APIs和JSON,同时提供支持如java,python,...

    双面人
  • PHP 使用 ElasticSearch 做搜索

    lasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearc...

    双面人
  • Elasticsearch 相关 api 操作

    A. es 操作 1. 检查 es 集群健康状态 bash命令:curl -XGET 'localhost:9200/_cat/health?v&pretty...

    潘成涛
  • Java 操作 ElasticSearch,so easy!

    松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程

    江南一点雨
  • Elasticsearch多文档操作

    Elasticsearch除了可以文档Index操作外,也提供了一次可以操作多个文档Index的API,上一篇已经把单文档的说了,从今天起说一说多文档Index...

    java乐园
  • 【Elasticsearch】3. 基本操作

    POST {index}/_doc PUT {index}/_create/{id}

    历久尝新
  • 你还在用命令看日志?用这款可视化工具简直太方便了!

    Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。

    mySoul
  • 搭建ELK日志分析系统

    ELK Stack 是Elasticsearch、Logstash、Kiban三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于...

    菲宇

扫码关注云+社区

领取腾讯云代金券