elasticsearch在windows下的安装、配置和thinkphp使用记录(完整版),
1、安装elasticsearch-2.3.5、javaSE环境
从官网下载最新版,然后用cmd进入解压后的elasticsearch目录,直接用bin/elasticsearch.bat启动。(java环境已经配置好,网上有很多相关教程)。
访问 http://localhost:9200/ (成功后继续进行)
2、下载php环境,用composer 安装 elasticsearch-php
下载好后,将文件夹放入 thinkphp的vendor 下。
3、写thinkphp 的展现类,直接贴我的代码。
<?php
namespace Home\Controller;
use Think\Controller;
use Elasticsearch\ClientBuilder;
class ElasticController extends Controller
{
public function _initialize()
{
Vendor('Elasticsearch.autoload');
$this->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的刚刚开始,他的强大功能值得你去学习。