zoukankan      html  css  js  c++  java
  • elasticsearch简单的增删改查与高亮显示

    原生方式 添加索引

    $hosts = [
        '127.0.0.1:9200'
    ];
    $client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
    
    // 创建索引
    $params = [
        'index' => 'goods',
        'body' => [
            'settings' => [
                'number_of_shards' => 5,
                'number_of_replicas' => 1
            ],
            'mappings' => [
                '_doc' => [
                    '_source' => [
                        'enabled' => true
                    ],
                    'properties' => [
                        'title' => [
                            'type' => 'keyword'
                        ],
                        'desn' => [
                            'type' => 'text',
                            'analyzer' => 'ik_max_word',
                            'search_analyzer' => 'ik_max_word'
                        ]
                    ]
                ]
            ]
        ]
    ];
    $response = $client->indices()->create($params);

    更新数据

    $hosts = [
        '127.0.0.1:9200',
    ];
    $client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
    // 写文档
    $params = [
        'index' => 'goods',
        'type' => '_doc',
        'id' => $model->id,
        'body' => [
            'title' => $model->title,
            'desn' => $model->desn,
        ],
    ];
    $response = $client->index($params);

    搜索数据

    $hosts = [
        '127.0.0.1:9200',
    ];
    $client = ElasticsearchClientBuilder::create()->setHosts($hosts)->build();
    $params = [
        'index' => 'goods',
        'type' => '_doc',
        'body' => [
            'query' => [
                'match' => [
                    'title'=>[
                        'query' => '手机'
                    ]
                ]
            ]
        ]
    ];
    $results = $client->search($params);
    dump($results);

    封装方法使用

    高亮显示

     public function search_doc()
        {
            $where='图形';
            $es = new ES('es');
            $index_name = "es";
            $type_name = "es";
            $body = [
                'query' => [
                    'bool' => [
                        'should' => [
                            [
                                'match' => [
    //                                搜索的字段名
                                    'title' => [
                                        //搜索的关键字
                                        'query' => $where,
                                        'boost' => 4, // 权重大
                                    ]
                                ],
    
                            ],
                            [
                                'match' => [
                                    'content' => [
                                        '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['title']=str_replace($where,"<span style='color: red'>$where</span>",$val['title']);
            }
            //可以将数据发送到视图
            print_r($data);

    简单的增删改查

    <?php
    
    namespace appescontroller;
    
    use appcommonlibES;
    
    use NunoMaduroCollisionHighlighter;
    //use NunoMaduroCollisionContractsHighlighter;
    use thinkController;
    use thinkDb;
    use thinkException;
    use thinkRequest;
    use ElasticsearchClientBuilder;
    
    class Esone extends Controller
    {
    
    
        /**
         * 显示资源列表
         *
         * @return 	hinkResponse
         */
        public function index()
        {
    
            //创建索引  索引名称不能重复 否则报错
            $es = new ES('es');
            //你要创建的索引名称
            $index_name = "es1";
            $es->create_index($index_name);
        }
    
    
    
        //添加数据
        public function create()
        {
            //
            $es = new ES('es');
            $params = [
                'index' => "es1",
                'id' => '1',
                'type' => "article",
                "body" => [
                    "title" => "我是第一次添加的数据article1",
                    'desn' => "我是第一次添加的数据desn1"]
            ];
            $es->add_doc($params);
        }
    
    //    根据id修改es中的数据
        public function update()
        {
            //
            $es = new ES('es');
            $params = [
                'index' => "es1",
                'type' => "article",
                'id' => "1",
                "body" => [
                    "doc" => [
                        "title" => "6100万颗心的共同记忆 再次C位亮相,闪耀全球!",
                        "desn" => "刚刚过去的这个清明节,与往年一样,有人凭寄哀思,有人缅怀忠魂。但也有一些瞬间,让人记起久久不能释怀,给这个特殊节气增添了一些格外不同的味道。"
                    ]
                ]
            ];
            $es->update_doc($params);
    
    
        }
    
        //获取文档  搜索数据
        public function selects()
        {
            $es = new ES('es');
            $a = $es->get_doc('1', 'es1', 'article');
            dump($a);
    
        }
    
        //删除  根据id删除数据
        public function delete()
        {
            //
            $es = new ES('es');
            $a = $es->delete_doc('1', 'es1', 'article');
            //删除成功
            dump($a);
    
        }
    
    
        //表单实现数据添加
    
    
        public function add()
        {
            //渲染视图
    
            return view('inex');
        }
    
        public function addData(Request $request)
        {
            //接受数据
            $data = $request->param();
            //验证
            //添加数据
            //数据库
            try {
                //
                $data = appesmodelEs::create($data);
                //将数据添加到es中
                $es = new ES('es');
                $params = [
                    //索引名
                    'index' => "es",
                    //相当于数据库
                    'type' => "es",
                    //id
                    'id' => $data['id'],
                    "body" => [
                        "title" => $data['title'],
                        "content" => $data['content'],
                        "desn" => $data['desn'],
                    ]
                ];
                $es->add_doc($params);
            } catch (Exception $exception) {
                return join(['code' => 200, 'msg' => $exception->getMessage(), 'data' => ""]);
            }
    
            return join(['code' => 200, 'msg' => '添加成功', 'data' => $data]);
        }
    
        //查询数据 一条数据
        public function select(Request $request)
        {
            //要搜索的id值
            $id = '5';
            $es = new ES('es');
            //查询数据
            $a = $es->get_doc($id, 'es', 'es');
            print_r($a);
        }
    
        public function search_doc()
        {
            $where='图形';
            $es = new ES('es');
            $index_name = "es";
            $type_name = "es";
            $body = [
                'query' => [
                    'bool' => [
                        'should' => [
                            [
                                'match' => [
    //                                搜索的字段名
                                    'title' => [
                                        //搜索的关键字
                                        'query' => $where,
                                        'boost' => 4, // 权重大
                                    ]
                                ],
    
                            ],
                            [
                                'match' => [
                                    'content' => [
                                        '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['title']=str_replace($where,"<span style='color: red'>$where</span>",$val['title']);
            }
            //可以将数据发送到视图
            print_r($data);
    
        }
    
    }
  • 相关阅读:
    np.newaxis
    UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 576-577: invalid continuation byte
    shell $() vs ${}
    install docker-ce for ubuntu
    ImportError: pycurl: libcurl link-time ssl backend (nss) is different
    saltstack install on centos7
    pycharm 用远程环境时报错bash: line 0: cd: /home/tmp: No such file or directory
    计算函用运行用时
    scrapy-redis
    merge dict key
  • 原文地址:https://www.cnblogs.com/cyxng/p/14654522.html
Copyright © 2011-2022 走看看