laravel 实现ES高亮搜索

本文介绍了如何使用PHP通过Elasticsearch客户端操作,包括安装配置Elasticsearch、创建Client实例、添加文档和搜索功能。重点展示了如何在框架中封装Elasticsearch搜索操作,并在前端展示搜索结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装配置

官网下载:下载 Elastic 产品 | Elastic

2.安装完后运行

点击   elasticsearch.bat 运行

 cmd进入  E:\ES\elasticsearch-head-master  文件安装的目录   执行 npm start 

 到此运行成功 在网页上查看   Node Exporter

 

 3.在框架中

composer安装命令

 composer require elasticsearch/elasticsearch

2.封装逻辑层

<?php

namespace App\Http\Business;

use Elasticsearch\ClientBuilder;

class Elasticsearch
{
    //ES客户端链接
    private $client;

    /**
     * 构造函数
     *
     * MyElasticsearch constructor
     *
     * */
    public function __construct()
    {
        $this->client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
    }


    /**
     * 添加文档
     * @param $id
     * @param string $index_name
     * @param string $type_name
     * @return array
     */
    public function add_doc($id, $index_name, $type_name, $doc)
    {
        $params = [
            'index' => $index_name,
            'type' => $type_name,
            'id' => $id,
            'body' => $doc
        ];

        return $this->client->index($params);
    }


    /**
     * @param $key
     * @param $index
     * @param $type
     * @return array|callable
     * 上面的搜索是一个范例
     * 本搜索是做es搜索的主要
     */
    public function search($key, $index, $type)
    {
        //搜索的值和库中的值进行对比
        $params = [
            'index' => $index,//数据库名
            'type' => $type, // 表名
            'body' => [
                'query' => [
                    'match' => [
                        //要搜索的字段↓
                        'fang_name' => $key//要搜索的内容
                    ]
                ],
                'highlight' => [ // 高亮
                    'fields' => [
                        'fang_name' => [
                            'pre_tags' => [
                                '<span style="color: red">'
                            ],//样式
                            'post_tags' => [
                                '</span>'
                            ]
                        ]
                    ]
                ]
            ],
        ];
        //执行搜索
        return $this->client->search($params);
    }
}

3.在数据添加入库时进行es添加

(new Elasticsearch())->add_doc(内容id,'数据库名','表名',数据);

4.进行搜索

 public function serach(){
        $keyword = request()->get('keyword');
        $res = (new Elasticsearch())->search($keyword,'goods','goods_type');
        $data = array_column($res['hits']['hits'],'_source');
        foreach ($data as $k => &$v){
            $data[$k]['image'] = json_decode($data[$k]['image'],true);
            $v['address'] = $res['hits']['hits'][$k]['highlight']['address']['0'];
        }
        if($data){
            return response()->json(['code' => 200,'msg' => '查询成功','data' => $data]);
        }


    }

 数据返回到前端就可以了

web端要解析,如果不修改会解析不出来
<td>{!!$val['title']!!}</td>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值