版本说明
- 本文是在es8.4.1下进行操作,同时已经安装了ik分词器。
- php操作es的库为elasticsearch-php,github地址为:
GitHub - elastic/elasticsearch-php: Official PHP client for Elasticsearch. - 所有的操作都基于本地服务器进行,本地安装时关闭了安全验证
- index为goods,mapping结构如下:
{
"goods": {
"mappings": {
"properties": {
"brand": {
"type": "keyword"
},
"content": {
"type": "text",
"analyzer": "ik_max_word"
},
"id": {
"type": "integer"
},
"sort": {
"type": "integer"
},
"title": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
}
- 进行操作时,新建es对象
use Elastic\Elasticsearch\ClientBuilder;
$client = ClientBuilder::create() ->setHosts(['localhost:9200']) ->build();
一些查询操作
我们使用es的情景大部分都是查询,下面列举一些常用的操作场景以及对应的代码文章来源:https://www.toymoban.com/news/detail-410337.html
获取mapping结构
$response = $client->indices()->getMapping(['index'=>'goods_bak']);
批量批量插入数据
//$count 为从数据库中取的总数,$result为对应的结果集
for($i = 0; $i < $count; $i++) {
$add_params['body'][] = [
'index' => [
'_index' => "goods",
'_id' => ($i+1) . ""
],
];
$add_params['body'][] = [
'id' => $result[$i][0] + 1,
'title' => $result[$i][1],
'content' => $result[$i][2],
'sort' => $result[$i][3],
'brand' => $result[$i][4],
];
}
$responses = $client->bulk($add_params);
删除文档数据
$delete_params = [
'index' => 'goods',
'body' => [
'query' => [
'range' => [
'id' => [
//删除id > 1的文档记录
'gte' =>1
]
]
]
]
];
$responses = $client->deleteByQuery($delete_params);
查询title中包含关键词懒虫的文档记录
// match 会对查询的关键词进行分词,term不会。例如查询华为手机,match会查询title中包含华为或者手机或者华为手机的,term不会对查询的关键词做拆分
//不支持对多个字段进行同时查询
//es默认返回10条记录,可以用from(偏移量)和size(pagesize)进行分页
$params = [
'index' => 'goods',
'body' => [
'query' => [
'term' => [
// 'match' => [
'title' => '懒虫天鹅'
]
]
],
'from' => 0, //分页的位置
'size' => 20 //返回多少条
];
$response = $client->search($params)->asArray();
模糊查询之wildcard、前缀查询
$params = [
'index' => 'goods',
'body' => [
'query' => [
//wildcard会对查询条件进行分词,后面可以接* ? 通配符进行匹配
// prefix前缀匹配,匹配到分词中以设置的关键词开头的分词
// 'wildcard' => [
'prefix' => [
'brand' => '星'
]
]
],
'from' => 0,
'size' => 20
];
范围查询
$params = [
'index' => 'goods',
'body' => [
'query' => [
'range' => [
'sort' => [
'gte' => 10,
'lte' => 100,
]
]
]
],
'from' => 0,
'size' => 20
];
bool查询
//bool查询,多个条件共同成立,有四种选择,must(计算得分,性能较低) filter(过滤条件,不计算得分,性能高),must_not(条件必须不成立),should(条件可以成立)
//查询title包含懒虫且brand中含有华为的文档记录
$params = [
'index' => 'goods',
'body' => [
'query'=>[
'bool' => [
'filter' => [
//多个筛选条件时,每个term是数组形式
['term' => ['title' => '懒虫',]],
['term' => ['brand' =>'华为',]]
]
]
]
],
'from' => 0,
'size' => 30
];
多个字段不同关键词查询的并集操作
$params = [
'index' => 'goods',
'body' => [
'query'=>[
//查询title包含懒虫或者brand包含华为的文档记录
'dis_max' => [
'queries' => [
//多个筛选条件时,每个term是数组形式
['term' => ['title' => '懒虫',]],
['term' => ['brand' =>'华为',]]
]
]
],
//对结果进行聚合操作
'aggs' => [
//最大得分的记录,返回的结果字段为max_sort
'max_sort' => [
'max' => ['field' => 'sort']
],
//对查询结果按brand进行聚合汇总,取出前size条记录
'goods_brand_rank' => [
'terms' => [
'field' => 'brand',
'size' => 10
]
]
],
//对结果进行高亮显示
'highlight' => [
//这里定义高亮显示的字段以及高亮显示的tag,前端拿到tag后进行处理
'fields' => [
'title' => [
'pre_tags' => '<font color="red">',
'post_tags' => '</font>',
]
]
]
],
'from' => 0,
'size' => 30
];
文章来源地址https://www.toymoban.com/news/detail-410337.html
到了这里,关于elasticsearch 简单使用【php版本】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!