Thinkphp5使用Elasticsearch

时间:2024-03-19 18:56:13

Thinkphp5使用Elasticsearch

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

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

Thinkphp5使用Elasticsearch

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

2.项目中引入

Thinkphp5使用Elasticsearch

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

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

Thinkphp5使用Elasticsearch

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

b.映射索引(相当于mysql表格新增字段)
Thinkphp5使用Elasticsearch

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

Thinkphp5使用Elasticsearch

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

Thinkphp5使用Elasticsearch
Thinkphp5使用Elasticsearch

id我取的数据库的主键id,必须唯一
d.查询
筛选查询 bool查询里使用filter
Thinkphp5使用Elasticsearch

如果需要多个筛选字段,filter里面嵌套bool查询,must必须满足,must里面套多个range数组
Thinkphp5使用Elasticsearch

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

整词匹配查询(可以做到整词匹配,我这边将分类设置为keyword,可以作为分类筛选,int型也可整词匹配,比如单独匹配值为1的)
Thinkphp5使用Elasticsearch

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

模糊查询,bool查询里must和should同时使用需要设置minimum_should_match为1
Thinkphp5使用Elasticsearch

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