当前位置:   article > 正文

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-Mysql分词检索实现

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-Mysql分词检索实现

锋哥原创的Springboot+Layui python222网站实战:

python222网站实战课程视频教程(SpringBoot+Python爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBoot+Python爬虫实战) ( 火爆连载更新中... )共计23条视频,包括:python222网站实战课程视频教程(SpringBoot+Python爬虫实战) ( 火爆连载更新中... )、第2讲 架构搭建实现、第3讲 页面系统属性动态化设计实现等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1yX4y1a7qM/MySQL支持全文索引和搜索:

  MySQL中的全文索引是FULLTEXT类型的索引。

  全文索引只能用于InnoDB或MyISAM表,并且只能为CHAR、VARCHAR或TEXT列创建。

  MySQL5.7提供了一个内置的全文ngram解析器,支持中文,日文和韩文(CJK),以及一个可安装的MeCab日文全文解析器插件。

  FULLTEXT索引定义可以在创建表时在CREATE TABLE语句中给出,也可以稍后使用ALTER TABLE或CREATE INDEX添加。

  对于大型数据集,将数据加载到一个没有FULLTEXT索引的表中,然后在此之后创建索引,比将数据加载到一个已有FULLTEXT索引的表中要快得多。

  1. -- 创建全文索引
  2. CREATE FULLTEXT INDEX ft_title ON t_article (title) WITH PARSER ngram

mybatis-plus支持实现全文检索

ArticleMapper加个方法:

  1. /**
  2. * 根据检索字符串进行全文检索
  3. * <p>
  4. * 全文检索包含字段:title
  5. * </p>
  6. * @param page
  7. * @param queryStr
  8. * @return
  9. */
  10. IPage<Article> queryFulltext(Page<Article> page, @Param("queryStr") String queryStr);

ArticleMapper.xml加下方法实现:

  1. <!-- 全文索引检索 -->
  2. <select id="queryFulltext" resultType="com.python222.entity.Article">
  3. select * from t_article
  4. <where>
  5. <if test="queryStr != null" >
  6. and ( MATCH (title) against (#{queryStr}) )
  7. </if>
  8. </where>
  9. order by id desc
  10. </select>

ArticleService加下:

IPage<Article> queryFulltext(Page<Article> page, @Param("queryStr")  String queryStr);

ArticleServiceImpl实现:

  1. @Autowired
  2. private ArticleMapper articleMapper;
  3. @Override
  4. public IPage<Article> queryFulltext(Page<Article> page, String queryStr) {
  5. return articleMapper.queryFulltext(page,queryStr);
  6. }

IndexController.java加下:

  1. /**
  2. * 根据关键字分词检索
  3. *
  4. * @param keyWord
  5. * @return
  6. */
  7. @RequestMapping("/search/{page}")
  8. public ModelAndView search(String keyWord, @PathVariable(value = "page", required = false) Integer page) {
  9. ModelAndView mav = new ModelAndView();
  10. if (StringUtil.isEmpty(keyWord)) {
  11. return this.index();
  12. }
  13. Page<Article> pageArticle = new Page<Article>(page, 10);
  14. IPage<Article> pageResult = articleService.queryFulltext(pageArticle, keyWord);
  15. mav.setViewName("search");
  16. mav.addObject("keyWord", keyWord);
  17. mav.addObject("articleList", pageResult.getRecords());
  18. mav.addObject("pageCode", PageUtil.genPagination("/search", pageResult.getTotal(), page, 10, "?keyWord=" + keyWord));
  19. return mav;
  20. }

模版search.html:

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <title th:text="${keyWord}+'-搜索结果页面-'+${application.propertyMap['k1']}"></title>
  6. <meta name="keywords" th:content="${keyWord}+'-搜索结果页面-'">
  7. <meta name="description" th:content="${keyWord}+'-搜索结果页面-'">
  8. <link href="/systemImages/favicon.ico" rel="SHORTCUT ICON">
  9. <link rel="stylesheet" href="/layui/css/layui.css"/>
  10. <link rel="stylesheet" href="/css/css.css"/>
  11. <link rel="stylesheet" type="text/css" href="/css/normalize.css" />
  12. <link rel="stylesheet" href="/css/font-awesome.min.css">
  13. </head>
  14. <body>
  15. <div class="header_top" th:include="common/head::#h" />
  16. <div class="header" th:include="common/menu::#m" />
  17. <div class="main_wrapper">
  18. <div class="w1220 index_content">
  19. <div class="content_left">
  20. <div class="search">
  21. <h4 class="search_title" th:text="'`'+${keyWord}+'` - 搜索结果'"></h4>
  22. </div>
  23. <div class="post_list">
  24. <div class="post_item" th:each="article,status:${articleList}">
  25. <div class="post_item_text">
  26. <a class="post_item_title" th:href="'/article/'+${article.id}" target="_blank" th:text="${article.title}"></a>
  27. <div class="post_item_summary">
  28. <a th:href="'/article/'+${article.id}" target="_blank"><img class="avatar" th:src="'/randomImages/'+${(status.index)%10+1}+'.png'"/></a>
  29. <p th:text="${article.summary}"></p>
  30. </div>
  31. </div>
  32. <div class="publishDate" th:text="${#dates.format(article.publishDate, 'yyyy-MM-dd HH:mm:ss')}"></div>
  33. </div>
  34. </div>
  35. <div class="pageCode" th:utext="${pageCode}"></div>
  36. </div>
  37. <div class="content_right">
  38. <div class="card">
  39. <h4 class="card_title">热门帖子推荐</h4>
  40. <ul class="item_list">
  41. <li th:each="hotArticle,status:${application.hotArticleList}"><span class="number" th:text="${status.index+1}+'.'"></span><a th:href="'/article/'+${hotArticle.id}" target="_blank" th:title="${hotArticle.title}" th:text="${hotArticle.title}"></a></li>
  42. </ul>
  43. </div>
  44. <div class="tag">
  45. <h4 class="tag_title">热门标签推荐</h4>
  46. <ul class="item_list">
  47. <li th:each="tag:${application.tagList}">
  48. <a th:href="@{'/search/1?keyWord='+${tag.name}}" target="_blank"><button type="button" class="layui-btn layui-btn-sm" th:text="${tag.name}"></button></a>
  49. </li>
  50. </ul>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="footer" th:include="common/footer::#f" />
  56. </body>
  57. </html>

menu.html加下回显。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49994
推荐阅读
相关标签
  

闽ICP备14008679号