1、安装elasticsearch-2.3.5、javaSE环境
从官网下载最新版,然后用cmd进入解压后的elasticsearch目录,直接用bin/elasticsearch.bat启动。(java环境已经配置好,网上有很多相关教程)。
访问 http://localhost:9200/ (成功后继续进行)
2、下载php环境,用composer 安装 elasticsearch-php
下载好后,将文件夹放入 thinkphp的vendor 下。
3、写thinkphp 的展现类,直接贴我的代码。
client = ClientBuilder::create()->build(); } public function index() { $post = I("get."); $searchParams['index'] = 'yunnan'; $searchParams['type'] = 'article'; $searchParams['sort'] = array( '_score' => array( 'order' => 'desc' ) ); $searchParams['body']['query'] = [ 'multi_match' => [ 'title' => $get['key'] 'content' => $get['key'] ] ]; $searchParams['body']['highlight'] = [ "fields" =>[ "title" => [ new \stdClass() ], "content" => [ new \stdClass() ] ] ]; $docs = $this->client->search($searchParams); // dump($docs); $count = $docs['hits']['total'];// 查询满足要求的总记录数 $Page = new \Think\Page($count,5);// 实例化分页类 传入总记录数和每页显示的记录数(10) $show = $Page->show();// 分页显示输出 // 进行分页数据查询 注意limit方法的参数要使用Page类的属性 $searchParams['from'] = $Page->firstRow; $searchParams['size'] = $Page->listRows; $Page->parameter[$key] = $get['key'];//传url参数 $res = $this->client->search($searchParams); $list = $res['hits']['hits']; $this->assign('list',$list);// 赋值数据集 $this->assign('page',$show);// 赋值分页输出 $this->assign('count',$count); $this->display(); // 输出模板 // dump($list); } public function add($res) { $params = array(); $params['index'] = 'yunnan'; $params['type'] = 'article'; $params['id'] = $res['id']; unset($res['id']); unset($res['cid']); $params['body'] = $res; $ret = $this->client->index($params); } public function delete($ids) { $deleteParams = array(); $deleteParams['index'] = 'yunnan'; $deleteParams['type'] = 'article'; foreach ($ids as $key => $value) { $deleteParams['id'] = $value; $retDelete = $this->client->delete($deleteParams); } }}
这样在页面里面就可以实现title、content 的全文检索了,这里面有个坑,必须看完文档才能领会。
hightlight 用match的时候只能高亮最后一个,跟他的原理有关,具体可以认真学习英文原版。只有使用 multi_match 的时候才可以获取多个字段的高亮数组。
另外,thinkphp跨类调用的方法是 R方法,R('elastic/add',array($id))。
4、到这里实现了搜索的基本功能,但是你会发现中文搜索的话,分词有问题。因为他的字段配置都是内置的标准分词器,并不适合中文分词。
所以,接下来就必须要安装 ik 中文分词器。网上安装方法很多,我是直接在github上安装的,里面的教程写的很详细了,请去那里解决:)
安装好后,按照他的要求进行打包 mvn packge。这个需要安装maven,可百度安装方法。
然后进行 index索引配置 和分词字段的 单独配置。这里提箱一下,索引的配置不能更改,字段的配置是可以修改的,所以要慎重配置索引,例如分片等。
提示:可以利用 plugins-head 工具的复合查询进行 索引的创建,和字段 mapping的设置,比较方便。
get查询,post提交配置修改。
配置好后,就可以开始中文搜索的 旅程了。不过这只是 elasticsearch的刚刚开始,他的强大功能值得你去学习。