Thinkphp5使用Elasticsearch
2023-03-29 23:03:03
547
{{single.collect_count}}

Thinkphp5使用Elasticsearch

使用的阿里云Elasticsearch服务,免去安装步骤

1.tp项目中安装Elasticsearch-php插件 ,composer安装

在这里插入图片描述

安装版本与elasticsearch版本一致,我这边elasticsearch7.7.1,安装elasticsearch-php 7.0 ,大版本一致的情况下DSL语法不会有很大差别.

2.项目中引入

在这里插入图片描述

3.使用(新建索引,映射索引,插入索引文档,查询索引文档,更新索引文档)

a.新建索引(相当于mysql新建库)

在这里插入图片描述

number_of_shards 主分片数 (默认值5)
number_of_replicas 副本分片数(默认值1)
这两个值取决于elasticsearch的节点数,一般elasticsearch集群多服务器多节点,没配置过,所以阿里云的服务很方便.
max_result_window 返回最大记录数

b.映射索引(相当于mysql表格新增字段,type对应一张表,es7.0之后已经不支持index对应多个type了)
在这里插入图片描述

需要作为查询字段的字符串设置为text,并设置分词ik_smart,分词插件需要另外安装,然后网上查询分词库,导入.
筛选字段设置为integer,时间筛选我转为int时间戳类型来筛选,elasticsearch也支持的date类型的字段筛选.
Keyword类型可作为关键字匹配,分类筛选时可整词匹配.

在这里插入图片描述

c.插入索引文档(相当于向mysql表里面插入数据)

在这里插入图片描述
在这里插入图片描述

id我取的数据库的主键id,必须唯一
d.查询
筛选查询 bool查询里使用filter
在这里插入图片描述

如果需要多个筛选字段,filter里面嵌套bool查询,must必须满足,must里面套多个range数组
在这里插入图片描述

track_total_hits 返回所有满足记录数
Size 和 from 分页
Sort 排序 $sort排序字段

整词匹配查询(可以做到整词匹配,我这边将分类设置为keyword,可以作为分类筛选,int型也可整词匹配,比如单独匹配值为1的)
在这里插入图片描述

bool查询 match匹配,同时满足多个匹配,就是组装多个match数组,类似range

模糊查询,bool查询里must和should同时使用需要设置minimum_should_match为1
在这里插入图片描述

这都是最基本的搜索DSL,多条件的列表查询筛选应该是够了

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}