美文网首页
Laravel+Elasticsearch实现全文搜索

Laravel+Elasticsearch实现全文搜索

作者: 简跃 | 来源:发表于2019-05-26 11:35 被阅读0次

利用ElasticSearch实现全文索引。

安装elasticsearch和ik插件

elasticsearch集成包下载(需要有java8 以上环境),此集成包包含了ElasticSearch和很多的插件,我们只需要保留其中的analysis-ik中文分词插件即可。

# 1. 将插件列表重定向到文件中
/root/elasticsearch-rtf-master/bin/elasticsearch-plugin list > /tmp/plugin.log
#2. 删除文件中的analysis-ik项
#3. 删除多余的插件
cat /tmp/plugin.log | xargs -I {} /root/elasticsearch-rtf-master/bin/elasticsearch-plugin remove {}
#4. 后台启动
/root/elasticsearch-rtf-master/bin/elasticsearch -d

安装Laravel使用的ElasticSearch的包

安装laravel/scout

Scout文档

安装scout的es驱动

下载地址

Laravel自定义命令行

创建Command

  1. 创建命令文件
php artisan make:command esInit
  1. 打开APP\Console\comamnds\EsInit.php文件,修改其内容为
...
protected $signature = 'es:init';
protected $desciption = 'this is a description';
// 这是这个命令将要执行的任务
public function handle(){
 // 需要先命令行执行composer require guzzlehttp/guzzle
 // 创建 index
  $client = new Client();
  $url = config('scout.elasticsearch.hosts')[0] . '/_template/tmp';
 $client -> delete($url);
 $client->put($url, [
    'json' => [
        'template' => config('scout.elasticsearch.index'),
        'mappings' => [
            '_default' =>  [
                'dynamic_templates' => [
                    ...
                ]
            ]
        ],
    ]
])
   // 创建 template
...
}
  1. 打开app/Console/kernel.php文件,修改其内容为:
protected $command = [
  \App\Console\Commands\EsInit::class,
];
  1. 此时已经可以通过php artisan 使用这个命令了。

将MySQL的数据导入到ElasticSearch中去

  1. 在数据表对应的模型中引入搜索模块
...
use Laravel\Scout\Searchable
....
use Searchable;
...
public function searchable() {
    return 'post';
}

// 定义用来搜索的字段
public function toSearchableArray(){
  return  [
      'title' => $this->title,
      'content' => $this-> content,
   ];
}
  1. 将MySQl中的数据导入到ElasticSearch中
 php artisan scout:import "\App\Post"
  1. 此时在数据写入数据库时,数据也会自动写入到ElasticSearch中;

增加搜索页面及搜索逻辑

 public function search() {
    $this->validate(request, [
      'query' => 'required',
    ]);

    $query =  request('query');
    $posts = \App\Post->search($post) -> get(); // 核心方法 可使用paginate进行分页
     ... 
}

此时,就可以通过ElasticSearch来进行搜索了。

相关文章

  • Laravel+Elasticsearch实现全文搜索

    利用ElasticSearch实现全文索引。 安装elasticsearch和ik插件 elasticsearch...

  • 构建全文搜索引擎

    实现快速全文搜索引擎的方法(2种):(1)利用全扫描进行全文搜索(2)利用索引进行全文搜索 利用全扫描进行全文搜索...

  • Lucene—全文检索

    1. 案例分析:什么时全文检索,如何实现全文检索   1.1 案例   实现一个文件的搜索功能,通过关键字搜索文件...

  • Django开发教程(五)

    十六、实现商品搜索功能 16.1商品搜索功能的分析: 16.2全文搜索框架haystack和搜索引擎whoosh的...

  • 使用nutch搭建类似百度/谷歌的搜索引擎

    Nutch是基于Lucene实现的搜索引擎。包括全文搜索和Web爬虫。Lucene为Nutch提供了文本索引和搜索...

  • 纯 MongoDB 实现中文全文搜索

    本文来自获得《2021MongoDB技术实践与应用案例征集活动》一等奖作品 摘要 MongoDB在2.4版中引入全...

  • 全文搜索

    全文搜索有两个重要的方面是:1.相关性:评价查询和结果间的相关程度2.分析:将文本块转换成有区别、规范化的toke...

  • Elasticsearch应用

    全文检索 模糊搜索 高速聚合 实时品牌搜索实现:展示品牌搜索条件时,只展示未结束的拍卖活动的品牌分组数据。 空间搜...

  • 用MySQL实现中文全文搜索|站内搜索

    首先我们首先要了解几个概念 MySQL自带英文的全文搜索功能,需要知道fulltext索引和myisam引擎。 英...

  • Go实现全文搜索引擎

    本文来源于Artem Krylysov的博客[https://artem.krylysov.com/blog/20...

网友评论

      本文标题:Laravel+Elasticsearch实现全文搜索

      本文链接:https://www.haomeiwen.com/subject/zftnzqtx.html