全文检索 高亮显示 数据库同步添加

<?php

namespace app\admin\controller;

use app\admin\model\Esones;
use app\common\lib\ES;
use think\Controller;
use think\Request;

class Esone extends Controller
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    //创建索引
    public function index()
    {
        //视图渲染
        return view('index');



    }

       //创建一个新的索引
    public function es(){
        $es=new ES('esl');
    }


    //添加数据
    public function addData(Request $request){
//        print_r($request->param());
        //添加数据到es
        $data=input();
        //添加数据
//        print_r($data);
        $data=Esones::create($data,true)->toArray();
//        print_r($data['name']);
        $es = new ES('es');
        $params = [
            'index' => "esl",
            'id' => $data['id'],
            'type' => "article",
            "body" => [
                'id'=>$data['id'],
                "name" => $data['name'],
                'age' => $data['age']
            ]
        ];
       $a= $es->add_doc($params);
       //重定向
       return redirect(url('lists'));



    }

    //搜索所有的数据
    public function lists(){
        //获取数据展示  全部数据 从es中获取
        $es = new ES('es');
        $data=$es->get_all('esl','article');
        //取值
        $data  = array_column($data,"hits");
        $data  = array_column($data[0],"_source");
//        print_r($data);

        return view('list',compact('data'));


    }


    //全文检索
    public function select(Request $request){
        $where=$request->param('name');
        $es = new ES('es');
        $index_name = "esl";
        $type_name = "article";
        $body = [
            'query' => [
                'bool' => [
                    'should' => [
                        [
                            'match' => [
//                                搜索的字段名
                                'name' => [
                                    //搜索的关键字
                                    'query' => $where,
                                    'boost' => 4, // 权重大
                                ]
                            ],

                        ],
                        [
                            'match' => [
                                'age' => [
                                    'query' => $where,
                                    'boost' => 3, // 权重大
                                ]
                            ],

                        ],

                    ],
                ]

            ]];
        $response= $es->search_doc($index_name, $type_name, $body);
        $data  = array_column($response,"hits");
        $data  = array_column($data[0],"_source");
        foreach ($data as $key => &$val){
            $val['name']=str_replace($where,"<span style='color: red'>$where</span>",$val['name']);
        }
        //可以将数据发送到视图
        return view('list',compact('data'));



    }



}

 

 

 

添加页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="{:url('addData')}">
    姓名:<input type="text" name="name">
    年龄:<input type="text" name="age">
    <input type="submit" value="提交">
</form>

</body>
</html>

 

 

列表展示

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Bootstrap 实例 - 基本的表格</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<form action="{:url('select')}" method="post">

    <input type="text" name="name">
    <input type="submit" value="搜索">
    <button><a href="{:url('lists')}">重置</a></button>
</form>


<table class="table">
    <caption>基本的表格布局</caption>
    <thead>
    <tr>
        <th>id</th>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    </thead>
    <tbody>
    {foreach $data as $v}
    <tr>

        <td>{$v['id']}</td>
        <td>{$v['name']}</td>
        <td>{$v['age']}</td>
        {/foreach}
    </tr>

    </tbody>
</table>

</body>
</html>

 

 

vue的使用方法

 

posted @ 2021-04-14 11:31  Conqueror·  阅读(81)  评论(0编辑  收藏  举报