四、ElasticSearch - PHP 操作 ES 搜索学习(完)

作者: 温新

分类: 【Elasticsearch】

阅读: 2351

时间: 2023-02-22 08:05:06

hi,我是温新,一名 PHPer

ES 版本:ElasticSearch 8.6.0

系统版本:Rocky Linux 9.1

学习目标:学会 PHP 中依据什么来搜索

本篇文章结合官方文档编写及参考网络资料编写,虽非全部原创,但也是结合了自己的理解,若转载请附带本文 URL,编写不易,持续编写更不易,谢谢!

PHP Elasticsearch 写法与 Elasticsearch 保持一致,不同点在于 Elasticsearch 使用的是 JSON 结构,而 PHP 中则需要转成数组。

PHP ES 查询差异性

ES 查询语法

GET php_articles/_search
{
  "query": {
    "match": {
      "title": "学习"
    }
  }
}

PHP ES 中的写法

$params = [
    'index' => 'index_name', // 索引名
     //body保存es 请求体内容, 这里的内容跟es查询语法保持一致,区别就是需要转成php数组格式
    'body'  => [ 
        // 这里的内容跟上面查询语法一致
        'query' => [
            'match' => [
                'testField' => 'value'
            ]
        ]
    ]
];

// 通过search执行查询请求。
$results = $client->search($params);

PHP ES 处理搜索结果

// 查询匹配
$search = [
    'index' =>  'php_articles',
    'body'  =>  [
        "query" => [
            "prefix" => [
                "title" =>  [
                    "value" => 'c'
                ]
            ]
        ]
    ]
];

$response = $this->client->search($search);
// 获取请求执行时间,单位毫秒
$milliseconds = $response['took']; 
// 获取匹配的最大分值
$maxScore     = $response['hits']['max_score'];
// 获取匹配的文档结果列表
$list 		 = $response['hits']['hits'];

分页

public function docPage()
{
    $doc = [
        'index' =>  'php_articles',
        // 分页参数, 开始偏移配置
        'from'  =>  0,
        // 分页参数 - 分页大小,默认 10
        'size'  =>  1,
        'body'  =>  [
            // 查询条件
            'query' =>  [
                'wildcard' =>  [
                    'title' =>  [
                        'value' =>  '学习*'
                    ]
                ]
            ]
        ]
    ];

    $response = $this->client->search($doc);

    $result = json_decode($response->getBody(), true);
    return response()->json($result);
}

关于 PHP 操作 ES 到这里接完结了,后续遇到什么查询以补充的形式学习。

这几篇文章的目的在于快速上手使用 ES,仅此而已。

请登录后再评论