es笔记和php操作es

es是什么?
    分布式全文搜索引擎
解决什么问题?
    传统关系型数据库全文索引慢
原理?
    分布式架构
    倒排索引:倒排索引是一个将单词映射到它们在文档中出现的位置的数据结构
        word   文档ID1,文档ID2
        区别于正排索引:
            文档ID1 word
            文档ID2 word
    分词器(分词策略):分词器是将文本分割成单个单词的组件,standard分词器 —— ES默认分词器,对于中文会按每个字分开处理,会忽略特殊字符
        一般中文用IK中文分词器即可,按词语来分词
        设置哪些可以分词
        可以自定义分词规则,例如按空格分
        支持自定义词典
    分析器:
        大小写,敏感or不好的词转*
        
查询:“小米”会被拆成“小”和“米”来进行查询,用match_all才会用“小米”
    

场景?
    大量数据的全文搜索
    
劣势or坑?
    硬件要求高:Elasticsearch 在处理大量数据时需要大量的内存和处理能力
    可能会脑裂

概念对比
    es        mysql
    群集    Database
    索引    表
    字段    字段
    文档    行

Elastic search 6.X 一个索引类型只能包含一个type
Elastic search 7.X 去掉了索引类型type

如果要搜索操作日志:
    1、建立索引。建立opt_log索引,定好哪些字段是分词,哪些是需要检索
    2、新建文档。把日志新增到es里
    3、查询

9300 端口为 Elasticsearch 集群间组件的通信端口   tcp port
9200 端口为浏览器访问的 http协议 RESTful 端口。  http port

put、get、delete是幂等的
post是非幂等的
PUT用于更新操作,POST用于新增操作比较合适

POST /uri 创建
DELETE /uri/xxx 删除
PUT /uri/xxx 更新或创建
GET /uri/xxx 查看

POST 新增。如果不指定id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号;
PUT 可以新增也可以修改。PUT 必须指定 id;由于 PUT 需要指定 id,我们一般都用来做修改;

创建索引:PUT school
    索引不能使用大写字母
    索引不能重复
添加数据:POST school/_doc/10
修改数据:POST school/_doc/10
删除数据:POST school/_doc/10
查询数据:POST school/_doc/10

主从
索引分片:索引是可以切分存放的

shard(分片)和 replica(副本)

集群:
    与其他节点通信配置:discovery.seed_hosts:["localhost":9001,"localhost":9002]

一般id自己指定比较好,因为删除和更新需要,如:用户名
    
单节点集群:分片,3主3从
集群:3个单节点集群组合起来,redis和es都是如此
插件:Elasticsearch-head插件,可以看集群状态

配置
    分片和他的副本不能放一起,不然挂了全没了
启动:逐个启动
扩容:集群加节点,启动后会对分片进项重新分配
故障转移:挂了一个,会重新分配
路由计算:哈希取模,计算得到节点(得到协调节点?)
分片控制:有个协调节点,如果是3个节点,每个节点3个分片的es集群,其实每个节点保存的数据是一样的,这里跟redis有区别
写流程:
    先到协调节点
    到指定节点
    然后同步到副本
读流程:
    先到协调节点
    轮训定位查哪个节点(负载均衡)


php如何连接es集群:
可以使用PHP官方提供的Elasticsearch PHP客户端库,跟redis集群一样,配置多个ip就行

es如何保证最新的索引被搜索到?
    按段搜索。通过新的补充索引来反映最新的修改情况,而不是重新整个倒排索引。查询的时候进行数据合并
    
如何保证实时搜索?
    
kibana:es数据进行可视化展示
Logstash:常用于日志系统中做日志采集设备,最常用于ELK中作为日志收集器使用
hive 是一个构建在Hadoop上的数据仓库工具,hive建一个外部表映射,写sql 操作es


// 创建索引
在 Postman 中,向 ES 服务器发 PUT 请求 : http://127.0.0.1:9200/shopping
// 查询索引,http://127.0.0.1:9200/_cat/indices?v,类似mysql的show tables
// 查询单个索引, http://127.0.0.1:9200/shopping
// 创建文档,向 ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/_doc,请求体JSON内容为:{"tile":"哈哈哈"...}
// 主键查询,向 ES 服务器发 GET 请求 : http://127.0.0.1:9200/shopping/_doc/1 。
// 全部修改,向 ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/_doc/1
// 删除,向 ES 服务器发 DELETE 请求 : http://127.0.0.1:9200/shopping/_doc/1
// 条件查询, http://127.0.0.1:9200/shopping/_search
// URL带参查询,  http://127.0.0.1:9200/shopping/_search?q=category:小米
// 请求体带参查询, http://127.0.0.1:9200/shopping/_search,请求体为json
    {
        "query":{
            "match":{
                "category":"小米"
            }
        }
    }

// php代码
<?php
require 'vendor/autoload.php'; // 引入 Elasticsearch-PHP 库

$client = Elasticsearch\ClientBuilder::create() // 创建 Elasticsearch 客户端
            ->setHosts(['localhost:9200']) // 设置 Elasticsearch 节点的地址和端口
            ->build();

$params = [
    'index' => 'my_index', // 指定要检索的索引名称
    'type' => 'my_type', // 指定要检索的文档类型名称
    'body' => [ // 设置检索条件
        'query' => [
            'match' => [
                'title' => 'php' // 检索标题中包含“php”的文档
            ]
        ]
    ]
];

$response = $client->search($params); // 发送搜索请求

print_r($response); // 输出搜索结果
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值