Elasticsearch在thinkphp5中的使用(模糊查询)

需要安装elasticsearch、elastic-header-master、kibana、analysis-ik四个包,如下图所示:(需要的包直接去github上搜索就可以,至于安装教程可以在csdn上搜,看好是按照在win还是linux上的,最主要的是按照会遇到很多问题,有钱首次安装会生成一个账号、密码、和code,记得保存在电脑上,首次启用kibaba时需要输入才可运行,记得安装好jdk>=1.8的版本,前提条件,所有安装的包都要对应相同的版本,否则在plugings中的ik重启就会失败)


注意:千万别去官网下载最新的,因为最新的那个下载后没有对应的ik中文,配置的话,我以后再写。也可以看别人的,我下载的是7.17.2的包,大于8的可能或多或少的出现问题。只针对于thinkphp5的Elasticsearch的增删改查。

一、创建索引

public function index(){$es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();$params = ['index' => 'movies',//类似于库名'body' => ['settings' => ['number_of_shards' => 3,'number_of_replicas' => 2],'mappings' => ['_source' => ['enabled' => true],'properties' => ['title' => ['type' => 'text',"analyzer" => "ik_max_word","search_analyzer" => "ik_max_word"]]]]];//执行创建$r = $es->indices()->create($params);dump($r);}

二、索引中新增数据

public function add_movies_data(){$data = Movies::select();//查询数据$res = (new Collection($data))->toArray();$es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();foreach ($res as $k=>$v){$params = ['index' =>'movies',//索引'type'  =>'_doc',//表(额外需要注意的,这里是固定的写法)'id'    =>  $v['id'],//主键'body'     =>$v//数据];$r = $es->index($params);}echo 'success';}

三、实现在Elasticsearch中数据的搜索(使得搜索的关键字高亮)

public function search_movies(){$word = input('word');//接收关键字$page = input('page',1);//接收当前页(如果没接收到,默认是1)$size = 5;//每页显示条数$limit = ($page-1)*$size;//偏移量$client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();//创建es实例//设置查询的条件$params = ['index' => 'movies',//索引(类似于库)//'type' => '_doc','body' => [//查询内容'query' => ['match' => [//匹配'title' => $word//匹配字段]],'highlight' => [//高亮'pre_tags' => ["<em style='color: red'>"],//样式自己写'post_tags' => ["</em>"],'fields' => ["title" => new \stdClass()]]]];//分页限制$params["size"] = $size;//每页显示条数$params["from"] = $limit;//偏移量$results = $client->search($params);//es搜索foreach ($results['hits']['hits'] as $k=>$v){$results['hits']['hits'][$k]['_source']['title'] = $v['highlight']['title'][0];}$data = array_column($results['hits']['hits'],'_source');$arr['data'] = $data;//数据$arr['page'] = $page;//当前页$arr['total'] = $results['hits']['total']['value'];//总条数$arr['last_page'] = ceil($results['hits']['total']['value']/$size);//总页数print_r($arr);//剩下的就是前端展示的事情了}

前端页面展示:

elasticsearch索引展示:

我将代码复制到此处:
Controller中的代码:

 public function first(){$es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();$params = ['index' => 'movies01',//类似于库名'body' => ['settings' => ['number_of_shards' => 3,'number_of_replicas' => 2],'mappings' => ['_source' => ['enabled' => true],'properties' => ['title' => ['type' => 'text',"analyzer" => "ik_max_word","search_analyzer" => "ik_max_word"],'goods_name' => [//goods_name 文档名称 相当于mysql中的字段'type' => 'text',//text文本'analyzer' => 'ik_max_word',//analyzer 指定分词器为ik'search_analyzer'=>'ik_max_word',//指定搜索时的分词器],'goods_logo' => ['type' => 'text'],'goods_price' => ['type' => 'text',//text文本],'goods_desc' => ['type' => 'text',//text文本'analyzer' => 'ik_max_word',//analyzer 指定分词器为ik'search_analyzer'=>'ik_max_word'//指定搜索时的分词器],'goods_remark' => ['type' => 'text',//text文本'analyzer' => 'ik_max_word',//analyzer 指定分词器为ik'search_analyzer'=>'ik_max_word'//指定搜索时的分词器],"news_source"=>["type"=>"text","fielddata"=>true]]]]];//执行创建$r = $es->indices()->create($params);dump($r);}public function add_movies_data(){$data = Goods::select();//查询数据$res = (new Collection($data))->toArray();$es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();foreach ($res as $k=>$v){$params = ['index' =>'movies01',//索引'type'  =>'_doc',//表(额外需要注意的,这里是固定的写法)'id'    =>  $v['id'],//主键'body'     =>$v//数据];$r = $es->index($params);}echo 'success';}public function search_movies($word){header("Access-Control-Allow-Origin:*");header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");//        $word = input('word');//接收关键字$page = input('page',1);//接收当前页(如果没接收到,默认是1)$size = 5;//每页显示条数$limit = ($page-1)*$size;//偏移量$client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();//创建es实例//设置查询的条件$params = ['index' => 'movies01',//索引(类似于库)//'type' => '_doc','body' => [//查询内容'query' => ['match' => [//匹配'title' => $word//匹配字段]],'highlight' => [//高亮'pre_tags' => ["<em style='color: red'>"],//样式自己写'post_tags' => ["</em>"],'fields' => ["title" => new \stdClass()]]]];//分页限制$params["size"] = $size;//每页显示条数$params["from"] = $limit;//偏移量$results = $client->search($params)->asArray();//es搜索foreach ($results['hits']['hits'] as $k=>$v){$results['hits']['hits'][$k]['_source']['title'] = $v['highlight']['title'][0];}$data = array_column($results['hits']['hits'],'_source');$arr['data'] = $data;//数据$arr['page'] = $page;//当前页$arr['total'] = $results['hits']['total']['value'];//总条数$arr['last_page'] = ceil($results['hits']['total']['value']/$size);//总页数
//        print_r($arr);//剩下的就是前端展示的事情了return json($arr);
//        return view('index/index',compact('arr',$arr));}

数据库数据展示:


前端代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8"><title>xx信息查询</title><script src="https://code.jquery.com/jquery-3.1.1.js"></script><script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<form><table id="table-search" width="80%" align="center" border="1"><tr><td>输入关键字</td><td><input type="text" maxlength="50" name="word" id="word"></td></tr><td><input type="button" value="搜索" id="btSearch" class="ui right floated positive button btn-search"/></td></tr></table>
</form>
<br/>
<table id="table-result" width="80%" align="center" border="1"><tr><th>货物名称</th><th>货物图标</th><th>货物价格</th><th>货物备注</th><th>分类</th></tr><tbody id="tbody-result"></tbody>
</table>
</body><script>$(function () {$('#btSearch').click(function () {var word = $('#word').val();var tbody = window.document.getElementById("tbody-result");$.ajax({type: "post",dataType: "json",url: "http://www.el.com/index.php/index/index/search_movies?word="+word,success: function (msg) {console.log(msg);if (msg) {var str = "";var data = msg.data;for (i in data) {str += "<tr>" +"<td align='center'>" + data[i].goods_name + "</td>" +"<td align='center'>" + data[i].goods_logo + "</td>" +"<td align='center'>" + data[i].goods_price + "</td>" +"<td align='center'>" + data[i].goods_remark + "</td>" +"<td align='center'>" + data[i].title + "</td>" +"</tr>";}document.getElementById('tbody-result').innerHTML = str;}},error: function () {alert("查询失败")}});});});
</script>
</html>

Elasticsearch在thinkphp5中的使用增删改查(模糊查询、批量查询)相关推荐

  1. js中数组的增删改查遍历迭代过滤

    注:最后附有源码,可自行测试,动动手印象更深刻 js中数组的增删改查.排序.遍历.迭代.过滤 1.展开语法 2.解构赋值 3.剩余解构 4.增删改 5.合并拆分 6.查 7.排序 8.遍历 9.迭代 ...

  2. Java中的sqlsession_java相关:MyBatis中SqlSession实现增删改查案例

    java相关:MyBatis中SqlSession实现增删改查案例 发布于 2020-6-13| 复制链接 摘记: 前言     开博客这是第一次写系列文章,从内心上讲是有点担心自己写不好,写不全,毕 ...

  3. MySql数据库的增删改查模糊查询

    MySql去笛卡尔积查询:select * from dept d,emp e where d.did=e.id 模糊查询的话查询全部数据如下 like 是模糊查询的意思  %是像的意思 比如 李% ...

  4. Spring Boot 中使用 MongoDB 增删改查

    本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...

  5. 【SpringBoot集成ElasticSearch 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(配置+增删改查测试源码)【推荐使用】

    1.简介 SpringBoot 项目初始化时就有 NoSQL 选项 Spring Data Elasticsearch(Access+Driver) 此时 pom 文件里引入的依赖是 spring-b ...

  6. MySQL对于表中数据的增删改查

    增删改查(curd) curd的解释: 代表创建(Create).更新(Update).读取(Retrieve)和删除(Delete) 查询基本使用 查询所有列(表中所有字段) select * fr ...

  7. 实现对mysql增删改查_Java语言实现对MySql数据库中数据的增删改查操作的代码

    简单说操作的步骤: 1.连接数据库 2.将SQL语句发送到数据库 3.执行SQL语句 这里举个例子: 在一个数据库中有个students表,表中有学号(Id),姓名(Name),性别(Sex),地址( ...

  8. 批量模糊查询_Django之ORM表高级操作、增删改查、F/Q查询等

    目录 一.如何开启自己的测试脚本? 二.对表数据的添加.更新.删除1.create()变态操作之批量插入数据2.update()3.delete()4.如何查看QuerySet对象执行的sql语句?5 ...

  9. mysql 完整的增删改查 和单表查询

    增语法: 1.所有数据按顺序插入 insert [into] 表名 values (值1, ..., 值n)[, ..., (值1, ..., 值n)]; 2.指定字段匹配插入,可以任意顺序 inse ...

最新文章

  1. Javascript之事件(一)
  2. numpy 矩阵计算例子
  3. Solaris10 JumpStart服务器配置
  4. php 原子性,PHP下O_APPEND模式的原子性
  5. 七年级上册计算机教学反思,七年级信息技术上册教学反思
  6. 【DIY】通达信DIY添加扫雷宝、地图和复盘(1)
  7. 惠普win7驱动_win7怎么样打开无线网卡开关
  8. 《实变函数简明教程》,第三章:可测函数,连续函数复合可测函数是可测函数
  9. 投影相机,透视相机,弱透视相机和仿射相机的区别和联系
  10. 动态规划——01背包——精卫填海
  11. 2021-2027全球与中国IPA干燥机市场现状及未来发展趋势
  12. Qt图像处理技术二:对QImage图片简单滤镜(暖色,冷色,反色,老照片,灰度)
  13. Vue 点击事件写法
  14. 【Android】【Java】写一个字符串到Android系统得文件里去存起来,保存字符串到文件
  15. phonegap 修改app的名称
  16. layui在搜索的时候没有数据,在表格中显示暂无数据
  17. ringbuff进阶 evbuffer
  18. 乔春洋:挑战型品牌的进攻策略
  19. Java选择与循环语句
  20. Spring Boot 启动报错:Caused by: java.lang.UnsupportedClassVersionError:

热门文章

  1. 基于Java的项目人力资源管理系统【附:源码课件】
  2. 记录一些面试相关的刁难题
  3. 一拖再拖,刁肥宅个人主页终上线!
  4. CAN总线之通俗易懂----工业连接器
  5. Python读写zip压缩文件的方法
  6. 中国铜行业市场消费量调研及投资潜力预测分析报告2022-2027年
  7. java中正则表达式Pattern与Matcher类使用详解(find、group)
  8. 常用的sql语句(一)
  9. 神武服务器维护打副本,《神武4》电脑版:零氪也能玩转新服 注重细节能挣不少神武币...
  10. notification源码分析_状态栏通知Notification、NotificationManager详解(源码)----转载...