代码编织梦想

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); // 输出搜索结果
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38230961/article/details/129483039

linux lampp/xampp环境elasticsearch-php安装笔记_蛙鳜鸡鹳狸猿的博客-爱代码爱编程

①检查依赖 本地是Ubuntu18.04环境,简易安装的lampp环境。Elasticsearch-PHP依赖于PHP7,先查看一下lampp自带的PHP版本。 root@ubuntu:~# whereis php php: /opt/lampp/bin/php root@ubuntu:~# ls -l /opt/lampp/bin/ | grep p

ElasticSearch笔记01-爱代码爱编程

安装部署过程网上有很多教程,在此不累赘 目录 1. 什么是ES?2. 基本概念2.1 Index2.2 Type2.3 Document2.4 Filed2.5 倒排索引3. RestFul操作风格(通过kibana测试)3.1 POST方式创建Document3.2 PUT创建Document3.3 PUT更新文档3.4 PUT创建索引3.5 PO

【Elasticsearch 自学笔记一】什么是 ES? ES 的基本安装和使用-爱代码爱编程

文章目录 什么是 ES?Docker 安装 ESDocker 安装 Kibana配置 Docker 网络基本使用索引操作字段操作 Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。 Elasticsearch是用Java语言开发的,并作为Apach

Elasticsearch学习笔记-爱代码爱编程

Elasticsearch学习笔记 一 下载安装1.1 Elasticsearch1.2 elasticsearch-head1.3 Kibana1.4 ik分词器二 es基础知识2.1 定义2.2 数据类型2.2.1 字符串2.2.2 数字2.2.3 date2.2.4 boolean2.2.5 binary2.2.6 ip2.2.7 range

ElasticSearch一:简介、概念、安装、Kibana客户端安装使用、IK分词器、数据管理-爱代码爱编程

目录 一、ElasticSearch简介 ElasticSearch(简称ES) 应用场景 ElasticSearch与Lucene的关系 哪些公司在使用Elasticsearch ES vs Solr比较 总结: ES vs 关系型数据库 Lucene全文检索框架 分词原理之倒排索引 倒排索引总结: Elasticsearch中的

elasticsearch php搜索,网站基于ElasticSearch搜索的优化笔记 PHP-爱代码爱编程

基本情况就是,媒体、试题、分类,媒体可能有多个试题,一个试题可能有多个分类,分类为三级分类加上一个综合属性。通过试题名称、分类等搜索查询媒体。 现在的问题为,搜索结果不精确,部分搜索无结果,ES的数据结构不满足搜索需求。解决方案就是,重构ES数据结构,采用父子关系的方式,建立media和question两个type。 全程使用https://git

php elasticsearch,PHP ElasticSearch的使用-爱代码爱编程

系统是Windows server 2003。 ElasticSearch是一个基于Lucene的稳定的、分布式、RESTFul的搜索引擎。其实所谓的RestFul就是它提供URL供你调用(建立索引和进行检索),不过直接这样使用实在是太凶残了。所以,它也提供了一系列client包,相当于将curl请求封装了,client包支持的语言包括Java、PH

ElasticSearch学习笔记(集群搭建)-爱代码爱编程

1.将安装包分发到其他服务器上面 2.修改elasticsearch.yml mkdir -p /usr/local/es/elasticsearch-7.6.1/log mkdir -p /usr/local/es/elasticsearch-7.6.1/data cd /usr/local/es/elasticsearch-7.6

ElasticSearch笔记-爱代码爱编程

ElasticSearch笔记 文章目录 ElasticSearch笔记前言下载地址本教程讲解什么ES的概述ES的安装es的启动es-head插件是什么下载安装kibana安装ES的核心概念IK分词器插件添加IK分词器自定义字典REST风格es的基础使用新版方法表格基础测试创建索引并插入文档数据创建指定类型的索引获取信息删除复杂一点的查询单条件带

es-elasticSearch笔记01-爱代码爱编程

目录 1.ElasticSearch简介 ​ 2.  Lucene全文检索框架 2.倒排索引 3.  Elasticsearch中的核心概念 4.  安装Elasticsearch 5 客户端Kibana安装 6  安装IK分词器 7、指定IK分词器作为默认分词器 8.ES数据管理 1.ElasticSearch简介 1.1 Ela

Elasticsearch学习笔记(初学) 3 php代码操作-爱代码爱编程

首先引用composer安装客户端 composer require elasticsearch/elasticsearch <?php /* Create By 2022/1/14 - 14:11 - Delimma To overcome difficulties! */ namespace app\xadmin\controller;

Elasticsearch学习笔记2(linux) - beego操作es-爱代码爱编程

创建索引 :   创建mapping: 请求地址: youku/_doc/_mapping?pretty&include_type_name=true json参数:  分词器:ik分词器 , 搜索分词器:ik分词器 {"properties":{"id":{"type":"integer"},"title":{"type":"tex

02 elasticsearch笔记_组合条件查询插件-爱代码爱编程

id:1 title:java设计模式 contentJava设计模式是每一个… 问题总结: 1、倒排索引总结: 索引就类似于目录,平时我们使用的都是索引,都是通过主键定位到某条数据,那么倒排索引呢,刚好相反,数据对应到主键

01 elasticsearch笔记_elk查询文档数-爱代码爱编程

1.ElasticSearch简介 1.1 ElasticSearch(简称ES) Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。 客户

【实战】php如何使用 elasticsearch 做搜索-爱代码爱编程

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 深入浅出讲解 E

es的文档操作_es 文档-爱代码爱编程

1、新增文档 语法: POST /索引库名/_doc/文档id {     "字段1": "值1",     "字段2": "值2",     "字段3": {         "子属性1": "值3",         "子属性2": "值4"     }, // ... } 示例: # 新增文档 POST /hmbb/_doc/1 {

elasticsearch 笔记 | 入门概念_qq48747760-爱代码爱编程

文章目录 Elasticsearch 基础Lucene 简介Elasticsearch 是什么Elasticsearch 用途用例Elasticsearch 的工作原理Elasticsearch 索引Elast

如何做springboot单元测试?_java springboot dao 单元测试-爱代码爱编程

前言 单元测试(unit testing),是指对项目中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试,对于Java来说或者是在SpringBoot项目中,最小的可测试单元就是一个方法。做单元测试就是为了证明某段代码的执⾏结果是否符合我们的预期。 那么单元测试有哪些好处呢? 1、可以⾮常简单、直观、快速的测试某⼀个功能是否正确。