Emlog搜索优化2 - 标题+全文搜索

发布于 / MySQL / 0 条评论

前段时间写了emlog搜索功能添加全文搜索功能:https://www.mmuaa.com/post-215.html

但是效果并不是很好,比如搜索python的时候,一些与python无关,只是在文中提到一下,在搜索中就会被排序到上面。

我们想要解决的是,希望标题中出现关键字的文章排在上面,文章中出现的关键字排在下面。

下面使用sql的union+临时表方法解决这一问题:

SELECT * FROM
(SELECT gid,title FROM emlog_blog WHERE title LIKE '%python%' ORDER BY date DESC) t3
UNION 
SELECT * FROM
(SELECT gid,title FROM emlog_blog WHERE content LIKE '%python%' ORDER BY date DSC) t4

但是emlog函数拼接sql语句的时候,逻辑似乎是写死的,修改起来比较麻烦,所以去掉了ORDER排序,变成这样:

select gid,title from blog_blog where (title like '%python%') 
union select gid,title from blog_blog where (content like '%python%') 
union select gid,title from blog_blog where (excerpt like '%python%');

好了。正文开始:

修改方法为:

将原来的/emlog/lib/controller/search_controller.php文件中,$sqlSegment那一行修改为:

$sqlSegment = "and (title like '%{$keyword}%' or content like '%{$keyword}%' or excerpt like '%{$keyword}%') order by date desc";

(因为emlog结构的问题,不能改变查询数目的sql语句逻辑)

接着找到这一句:

$logs = $Log_Model->getLogsForHome($sqlSegment, $page, $index_lognum);

在这一句的前面添加:

$sqlSegment = "and (title like '%{$keyword}%') union (SELECT * FROM " . DB_PREFIX . "blog WHERE type='blog' and hide='n' and checked='y' and (content like '%{$keyword}%' or excerpt like '%{$keyword}%'))";

(这一句用来查询文章)

OK,现在试一试,是不是达到预期效果了

P.S.:使用以上方式请备份文件。由于使用了union查询,搜索功能的查询效率会比之前的文章慢一倍,其他无影响。

转载原创文章请注明,转载自: 斐斐のBlog » Emlog搜索优化2 - 标题+全文搜索
目前还没有评论,快来抢沙发吧~