Laravel5.*实现FULL TEXT全文索引分页以及laravel实现文章标题和内容模糊搜索
Song •
4117 次浏览 •
0个评论 •
2018年03月17日
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中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
热门文章
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
-
electron安装使用better-sqlite3并解决NODE_MODULE_VERSION xxx. This version of Node.js requires 2024-11-06
-
Zerotier+Moon+Nginx实现内网穿透搭建网站 2024-08-23
更多相关好文