欢迎投稿

今日深度:

elasticsearch在windows下的安装、配置和thinkphp使用记录(完整版),

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的刚刚开始,他的强大功能值得你去学习。

www.htsjk.Com true http://www.htsjk.com/Elasticsearch/30454.html NewsArticle elasticsearch在windows下的安装、配置和thinkphp使用记录(完整版), 1、安装elasticsearch-2.3.5、javaSE环境 从官网下载最新版,然后用cmd进入解压后的elasticsearch目录,直接用bin/elasticsearch.bat启...
相关文章
    暂无相关文章
评论暂时关闭