关注互联网应用及运维技术的个人博客

Laravel用TNTSearch做内容搜索

情景前提

普通的sql where like 搜索的形式,不能满足于内容网站的搜索,需求要有分词功能,以便能更准确的找到需要展示的内容。
TNTSearch是一个php实现的轻量级全文索引引擎,可以满足一般网站的使用。

安装

composer reuquire vanry/laravel-scout-tntsearch

发布scout配置文件

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

发布tntsearch配置文件

php artisan vendor:publish --provider="Vanry\Scout\TNTSearchScoutServiceProvider"

启用

.env文件中添加

SCOUNT_DRIVER=tntsearch

安装中文分词包(可选)

SCWS

composer require vany/scws

jieba

composer require fukuball/jieba-php

phpanalysis

composer require lmz/phpanalysis

3选1,或不安装,将使用tntsearch默认的分词功能, 其中scws由C语言写,性能最佳,但不支持windows。jieba分词效果最好,但性能较差,占用内存大。phpanalysis介于两者之间。

.env中配置分词器

TNTSEARCH_TOKENIZER=phpanalysis

用法

1.添加Searchable Trait到模型

namespace App\Models;use Illuminate\Database\Eloquent\Model;use Laravel\Scout\Searchable;class Post extends Model{    use Searchable;    /**     * Get the indexable data array for the model.     *     * @return array     */    public function toSearchableArray()    {        $array = $this->toArray();        // Customize array...        return $array;    }}

2.同步数据到搜索索引

# scout 命令php artisan scout:import App\Models\Post# tntsearch 命令, 性能更好php artisan tntsearch:import App\Models\Post

3.使用模型进行搜索

Post::search('关键词')->get();//除了搜索用search方法之外,其余的跟之前用like没区别,可以分页Post::search('关键词')->paginate(10);
赞(0)
未经允许不得转载:飞天狒狒 » Laravel用TNTSearch做内容搜索

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址