Laravel5.*实现FULL TEXT全文索引分页以及laravel实现文章标题和内容模糊搜索

Song2734 次浏览0个评论2018年03月17日
mysql实现全文搜索,在laravel中不支持FULLTEXT全文搜索,在我们可以使用原生语句实现,如 DB::select('SELECTFROMorders_logsWHEREMATCH(message)AGAINST('测试'INBOOLEA

mysql实现全文搜索,在laravel中不支持FULL TEXT全文搜索,在我们可以使用原生语句实现,如

DB::select('SELECT * FROM orders_logs WHERE MATCH (message) AGAINST ('测试' IN BOOLEAN MODE)');

但是这样不方便分页,不方便我们使用Eloquent方法,今天发现一个拓展包,其实实现

一、安装full-text-search-laravel包

composer require 5dmatwebsearch/advancesearch:dev-master

二、注册服务提供者

config/app.php中注册服务提供者到providers数组:

AdvanceSearch\AdvanceSearchProvider\AdvanceSearchProvider::class,

同样在config/app.php中注册门面到aliases数组:

'FulTexrSearch' => AdvanceSearch\AdvanceSearchProvider\Facades\SearchFacades::class,

三、Mysql全文索引数据库设置以及常见问题解决

其实关于Mysql全文索引数据库设置以及常见问题解决,我已经在前一篇文章将结果了,非常简单,几个命令即可创建fulltext索引:mysql/Mariadb开启全文检索fulltext配置以及大数据搜索优化

四、使用方法介绍

官方提供的语法如下:

FullTextSearch::search(modelName , feilds, searchText  ,select , order , pagination , limit)

从上面可以看出,

  • modelName为一个查询构造器,你可以在app下创建一个类似于User的查询构造器
  • feilds代表查询的字段,你可以使用一个数组表示多个字段
  • searchText搜索内容,多关键字你可以用空格隔开
  • select代表你要查询出来的字段
  • order表示排序,比如["id","ASC"]
  • pagination代表是否分页
  • limit代表每叶数量 这里你可以和查询构造器一样正常的使用分页以及其他一系列Eloquent操作,具体我就不多说了

五、使用案例

use FullTextSearch;
...
$info = FullTextSearch::search("Orderslogs" ,['title','message'] ,"系统自动出单搜索关键字" ,['id' , 'order_id','message','title'] ,['id' ,'desc'] ,true ,30);

这样我们就可以查询到满足条件的搜索了,关于laravel Full Text搜索这里的数据分页,参考:laravel5带参数分页_自定义分页_获取总数以及列参数用法详解

六、常见问题

1、发现搜索匹配率不高,电话搜索不出来 源码默认使用的搜索模式为IN NATURAL LANGUAGE MODE自然语言格式,这种格式进行自然语言搜索,可能会匹配不到:

select * from `orders` where match(message) against ('\123\' IN NATURAL LANGUAGE MODE)

我们修改为布尔查找模式

select * from `orders` where match(message) against ('*123*' IN BOOLEAN MODE)

具体你可以查看这里:浅谈mysql fulltext全文索引优缺点

项目地址github地址:

https://github.com/zizohassan/full-text-search-laravel
请登录后评论
    当前暂无评价,快来发表您的观点吧...
    公告提示
    本站主要用于学习交流Laravel技术,分享Laravel优秀案例;同时非常欢迎大家投稿哦!如果有招聘信息也可以联系我我帮忙发布哦!