es学习

msql     对应       es

表      -----------  索引index

行      -----------  文档Document

列      -----------   字段field

表结构 ----------- 映射mapping

sql语句-----------dsl语句

 

 

kibana 类似 mysql连接工具客户端

 

建议用的版本跟我一样,8比较麻烦

docker run -d --name es7 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" --privileged -p 9200:9200 -p 9300:9300 --restart=always elasticsearch:7.12.1

需要挂载文件夹,不然后面很麻烦

 这种-v写法比较好,不用创建文件夹,就不会清空原来有的文件,可以在/var/lib/docker/volumes找到对的文件夹

具体会不会清空,需要测试一下才知道。(经测试:这样写不会清空原有的文件,推荐这样写)

 

9200端口:给php连接用的

 9300端口:es互联使用,一台es没用 

安装后访问 ip:9200 正常表示成功 

 docker run -d --name kibana7 -e ELASTICSEARCH_HOSTS=http://192.168.12.135:9200 -p 5601:5601 kibana:7.12.1

注意:这里使用ip

默认bridge网络中所有容器间只能用IP相互访问。自定义bridge网络中所有容器除ip访问外,还可以直接用容器名作为hostname相互访问。

 

分词:需要安装分词器,不然默认的分词器会一个个字分开

 

在github搜索后下载对应版本

 /usr/share/elasticsearch/plugins

文件夹必须叫ik,先改名后复制进去

重启即可使用

 

 

分词器拓展

在ik文件夹(挂载出来,不然修改麻烦)

 

常用mapping类型(类似mysql的表字段类型)

字符串:细分text(支持分词) 或 keyword(不分词)

数值类型:long、integer、short、byte、double、float

布尔:boolean

日期:date

对象:object

 

每个字段都可以设置是否建立字段索引,建立字段索引才会被搜索出来,默认true

analyzer:使用哪种分词器(text类型才能选择)

properties:字段的子字段

 

例子:

 

 es不可以修改索引库(表)

注意:可以新增字段

可以先删除,再新增 代替修改

 

 

全量修改:不存在则新增

 

 

注意 id 不是用long,用keyword

{ "mappings": { "_doc": { "properties": { "all": { "type": "text", "analyzer": "ik_max_word" }, "create_at": { "type": "keyword" }, "email": { "type": "keyword", "index": false }, "id": { "type": "keyword" }, "info": { "type": "text", "copy_to": [ "all" ], "analyzer": "ik_max_word" }, "user_name": { "type": "text", "copy_to": [ "all" ], "analyzer": "ik_smart" } } } } }

 

composer require elasticsearch/elasticsearch:7.12.0

 1 <?php
 2 namespace app\api\controller;
 3 
 4 use Elasticsearch\Client;
 5 use Elasticsearch\ClientBuilder;
 6 
 7 class Es
 8 {
 9     private static ?Client $client = null;
10 
11     //连接
12     public static function getClient(): ?Client
13     {
14         if (self::$client === null) {
15             // 一个或多个Elasticsearch节点的URL
16             $hosts = ['http://192.168.12.135:9200'];
17             self::$client = ClientBuilder::create()->setHosts($hosts)->build();
18         }
19 
20         return self::$client;
21     }
22 
23     // 插入
24     // 插入数据的方法
25     public function insertData()
26     {
27         $params = [
28             'index' => 'tp5-user',
29             'id' => 3,
30             'body' => [
31                 'id' => 3,
32                 'user_name' => 'xiaohong',
33                 'info' => '白嫖gg',
34                 'email' => 'xiaohong@qq.com',
35                 'create_at' => '1721883969'
36             ]
37         ];
38 
39         try {
40             $response = self::getClient()->index($params);
41             echo "Document inserted successfully.\n";
42             print_r($response);
43         } catch (\Exception $e) {
44             echo "Error inserting document: " . $e->getMessage();
45         }
46     }
47 
48     // 搜索
49     public function search()
50     {
51         $params = [
52             'index' => 'tp5-user',
53             'body'  => [
54                 'query' => [
55                     'match' => [
56                         'all' => 'tom'
57                     ]
58                 ]
59             ]
60         ];
61 
62         $results = self::getClient()->search($params);
63 
64         dump($results);
65     }
66 }

 

posted @ 2024-07-24 18:31  猫猫客服  阅读(11)  评论(1编辑  收藏  举报