ElasticSearch使用说明

ElasticSearch-PHP

composer安装

composer require elasticsearch/elasticsearch

实例化
use Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()->setHosts([
    'host' => '127.0.0.1',
    'port' => '9200',
])->build();

核心概念

索引(index)

一个索引可以理解成一个关系型数据库

//判断索引是否存在
$exists = $client->indices()->exists(['index' => $table]);
if(!$exists){
    //新建索引
    $client->indices()->create([
        'index' => $table,
        'body' => [
            'mappings' => [
                'properties' => $table_properties
            ]
        ]
    ]);
}
类型(type)

一个type就像一类表,比如user表、order表

注意

  • ES 5.X中一个index可以有多种type
  • ES 6.X中一个index只能有一种type
  • ES 7.X以后已经移除type这个概念
映射(mapping)

mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构

//定义$table_properties
$table_properties = [
    'name' => [
        'type' => 'keyword' //keyword是一个关键字,不会被分词
    ],
    'content' => [
        'type' => 'text', //text会被分词,使用的是全文索引
        'analyzer' => 'standard' //指定分词器
    ]
];
数据类型
类型描述
text字符串:用于全文索引,该类型的字段将通过分词器进行分词
keyword字符串:不分词,只能搜索该字段的完整的值
long、integer、short、byte、double、float、half_float、scaled_float数值型
boolean布尔型
binary二进制:该类型的字段把值当做经过base64编码的字符串,默认不存储,且不可搜索
integer_range、float_range、long_range、double_range、date_range范围类型:范围类型表示值是一个范围,而不是一个具体的值,比如age类型是integer_range,那么值可以是{“gte”:20,“lte”:40};搜索"term":{“age”:21}可以搜索该值
date日期:格式如:“2022-01-01”、“2022/01/01 12:10:30”、1598929631000(从1970年1月1日0点开始的毫秒数)
array数据
object对象
ipIP类型:IP类型的字段用于存储IPv4和IPv6的地址,本质上是一个长整形字段,例如:192.168.0.0/16
文档(document)

一个document相当于关系型数据库中的一行记录

//新建文档
$client->index([
    'index' => $table,
    'id' => $table.'_'.$data['id'], //唯一id,当id已存在时会变成修改操作
    'body' => [
        'id' => '12',
        'name' => '美团',
        'content' => '有用户在使用美团下单时发现无法使用支付宝支付了,对此你怎么看?你觉得这会影响数字化生活发展吗?'
    ]
]);
//批量新建文档
//内容是以下格式,每两个为一条数据
$client->bulk([
    'body' => [
        //第一条数据
        [
            'index' => [
                '_index' => $table,
                '_id' => $table.'_12'
            ]
        ],
        [
            'id' => '12',
            'name' => '美团',
            'content' => '有用户在使用美团下单时发现无法使用支付宝支付了,对此你怎么看?你觉得这会影响数字化生活发展吗?'
        ],
        //第二条数据
        [
            'index' => [
                '_index' => $table,
                '_id' => $table.'_13'
            ]
        ],
        [
            'id' => '13',
            'name' => '美团',
            'content' => '有用户在使用美团下单时发现无法使用支付宝支付了,对此你怎么看?你觉得这会影响数字化生活发展吗?'
        ]
    ]
]);
字段(field)

相当于关系型数据库表的字段

集群(cluster)

集群由一个或多个节点组成,一个集群由一个默认名称“elasticsearch”

节点(node)

集群的节点,一台机器或者一个进程

分片和副本(shard)

副本是分片的副本。分片有主分片(primary Shard)和副本分片(replica Shard)之分
一个Index数据在屋里上被分布在多个主分片中,每个主分片只存放部分数据
每个主分片可以有多个副本,叫副本分片,是主分片的复制

分词器

内置分词器
  1. standard analyzer (默认分词器,可以支持中文分词)
  2. simple analyzer
  3. whitespace analyzer
  4. stop analyzer
  5. language analyzer
  6. pattern analyzer
安装分词器
smartCN

一个简单的中文或中英文混合文本的分词器

安装之后重启

sh elasticsearch-plugin install analysis-smartcn

卸载sh elasticsearch-plugin remove analysis-smartcn

IK分词器

更智能更友好的中文分词器

安装

  1. 下载对应的版本
  2. 解压放到plugins目录下
  3. 重启ES

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j1SHqHa8-1630379968734)(https://s1.ax1x.com/2020/09/01/djHua6.png)]

搜索&分页&排序

详细文档:https://blog.csdn.net/afeiqiang/article/details/83047989

$results = $client->search([
    'index' => 'bbs_article',
    'body' => [
        'size' => 5, //分页:表示获取5条数据
        'form' => 5, //分页:表示从第6条开始获取
        'sort' => [
            'create_time' => [
                'order' => 'desc' //排序:create_time倒序
            ]
        ],
        'query' => [
            'match' => [
                'content' => '新闻发布会' //搜索
            ]
        ]
    ]
]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值