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);
    
        }
    
    }
  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/cyxng/p/14654522.html
Copyright © 2011-2022 走看看