TNTSearch 轻量级全文索引+中文分词

选用 TNTSearch 的原因:轻,方便移植,不需要额外安装服务,能减少后期维护的工作量。搜索的效果也还不错,可以满足大多数项目场景,如果对性能和精准度要求较高,还是使用 Elasticsearch 吧。因TNTSearch使用的逗号空格分词,所以我们还需要一个中文分词的服务。
这里我选用的是 fukuball/jieba-php 选它的原因也是轻量,也不需要过多的依赖,部署方便。

TNTSearch 集成教程
https://laravel-china.org/articles/3702/full-text-indexing-engine-implemented-in-tntsearch-php
教程讲的很清楚,也没有什么坑,根据教程一步步来就可以了。这里就不在重复了。

下面主要说说 TNTSearch 怎么集成 fukuball/jieba-php 中文分词。

安装 fukuball/jieba-php

composer composer require fukuball/jieba-php:dev-master

注:fukuball/jieba-php 分词对内存有要求,如果内存过小,分词的时候可能会报错。

开始集成

  1. 修改配置 app/config/scout.php 增加 jieba 的配置项

    'tntsearch' => [
    ... 'tokenizer' => [
    ...
    'jieba' => [
    'dict' => 'small',
    ], ....
    ],
    ...
    ],
  2. 新建一个 Tokenizer
    app/Handlers/TokenizerHandler.php

    <?php
    namespace App\Handlers;
    use Fukuball\Jieba\Jieba;
    use Fukuball\Jieba\Finalseg;
    use TeamTNT\TNTSearch\Support\TokenizerInterface;
    class TokenizerHandler implements TokenizerInterface
    {
    public function __construct(array $options = [])
    {
    Jieba::init($options);
    Finalseg::init($options);
    } public function tokenize($text, $stopwords = [])
    {
    return is_numeric($text) ? [] : $this->getTokens($text, $stopwords);
    } public function getTokens($text, $stopwords = [])
    {
    $split = Jieba::cutForSearch($text);
    return $split;
    }
    }
  3. 新建服务提供者,用来取代 laravel-scout-tntsearch-driver 默认的服务提供者
    app/Providers/ScoutServiceProvider.php

    <?php
    namespace App\Providers;
    use TeamTNT\TNTSearch\TNTSearch;
    use Laravel\Scout\EngineManager;
    use TeamTNT\Scout\Console\ImportCommand;
    use TeamTNT\Scout\Engines\TNTSearchEngine;
    use TeamTNT\Scout\TNTSearchScoutServiceProvider;
    use App\Handlers\TokenizerHandler;
    class ScoutServiceProvider extends TNTSearchScoutServiceProvider
    {
    public function boot()
    {
    $this->app[EngineManager::class]->extend('tntsearch', function ($app) {
    $tnt = new TNTSearch();
    $driver = config('database.default');
    $config = config('scout.tntsearch') + config("database.connections.{$driver}");
    $tnt->loadConfig($config);
    # 注入中文分词服务
    $tnt->setTokenizer(new TokenizerHandler(config('scout.tntsearch.tokenizer.jieba')));
    $tnt->setDatabaseHandle(app('db')->connection()->getPdo());
    $this->setFuzziness($tnt);
    $this->setAsYouType($tnt);
    return new TNTSearchEngine($tnt);
    });
    if ($this->app->runningInConsole()) {
    $this->commands([
    ImportCommand::class,
    ]);
    }
    }
    }
  4. 注册服务提供者,将 TNTSearchScoutServiceProvider 取消注册
    app/config/app.php
    ...
    'providers' => [
    ...
    SocialiteProviders\Manager\ServiceProvider::class,
    # TeamTNT\Scout\TNTSearchScoutServiceProvider::class,
    ...
    ]
    ...

至此集成完毕,可以去测试一下效果。
当然也可以根据 laravel-scout-tntsearch-driver 源码修改,然后打包成一个自己包,只是这样以后就失去了原包的升级服务。可以自行取舍,没有对错,适合就好。

如果有问题可以一起探讨一下。
我开源的 laraCMS 已集成了 TNTSearch ,如果有兴趣可以去github查看源码,也可以去在线体验

Github: https://github.com/wanglelecc/laracms
预览:https://www.56br.com/

TNTSearch 轻量级全文索引 + 中文分词的更多相关文章

  1. 轻量级的中文分词工具包 - IK Analyzer

    IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源项目Luence为应用 ...

  2. Lucene的中文分词器IKAnalyzer

    分词器对英文的支持是非常好的. 一般分词经过的流程: 1)切分关键词 2)去除停用词 3)把英文单词转为小写 但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好. 国人林良益写的IK Ana ...

  3. Elasticsearch安装ik中文分词插件(四)

    一.IK简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源项目Lu ...

  4. Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...

  5. IK 中文分词器

    链接:https://github.com/wks/ik-analyzerIKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始,IKAna ...

  6. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器

    注: elasticsearch 版本6.2.2 1)集群模式,则每个节点都需要安装ik分词,安装插件完毕后需要重启服务,创建mapping前如果有机器未安装分词,则可能该索引可能为RED,需要删除后 ...

  7. Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词

    一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在p ...

  8. 推荐十款java开源中文分词组件

    1:Elasticsearch的开源中文分词器 IK Analysis(Star:2471) IK中文分词器在Elasticsearch上的使用.原生IK中文分词是从文件系统中读取词典,es-ik本身 ...

  9. 搜索引擎ElasticSearch系列(五): ElasticSearch2.4.4 IK中文分词器插件安装

    一:IK分词器简介  IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源 ...

随机推荐

  1. 20172308 实验四《Java面向对象程序设计 》实验报告

    20172308 2017-2018-2 <程序设计与数据结构>实验四报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 周亚杰 学号:20172308 实验教师:王 ...

  2. java判断集合是否重复的一种便捷方法

    内容来自其它网站,感谢原作者! import java.util.ArrayList; import java.util.HashSet; import java.util.List; /** * 通 ...

  3. httpwatch抓包工具的使用方法

    火狐浏览器下有著名的httpfox,而HttpWatch则是IE下强大的网页数据分析工具.这个工具到底有哪些具体功能呢?这个我就不再赘述了,百度百科上列的很全面,但也比较抽象.我只想说我曾经用这个工具 ...

  4. ARM-JTAG-SWD-schematic

  5. 使用Gitblit 搭建Windows Git服务器

    使用Gitblit 搭建Windows Git服务器 整理使用Gitblit搭建Git服务器的步骤. 目录 使用Gitblit 搭建Windows Git服务器 目录 下载安装 配置 运行 客户端运行 ...

  6. VS2015 Offline Help Content is now available in 10 more languages!

    https://blogs.msdn.microsoft.com/devcontentloc/2015/10/21/vs2015-offline-help-content-is-now-availab ...

  7. MySQL子查询慢现象的解决

    当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现“DEPENDENT SUBQUERY”时,你要注意了,你已经掉入了mysql子查询慢的“坑". 相 ...

  8. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  9. java根据模板HTML动态生成PDF

    原文:https://segmentfault.com/a/1190000009160184 一.需求说明:根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看. 二.解决方案: ...

  10. 手工Ghost安装系统

    (1)其实手工ghost很简单,正确操作的话是不会有什么问题的,在PE下,打开ghost程序 (2)按任意键进入ghost操作界面,出现ghost菜单,我们现在只用到Local菜单项,下面有三个子项: ...