【原来那么简单/大数据】随随便便开发一个属于自己的搜索引擎

网友投稿 1206 2022-10-07

【原来那么简单/大数据】随随便便开发一个属于自己的搜索引擎

【原来那么简单/大数据】随随便便开发一个属于自己的搜索引擎

【1K数据集+SpringBoot+Thymeleaf】基于全文检索技术lucene开发的搜索引擎

一、需求分析

实现一个搜索框,能够索引指定数据集(数据取自数据库中)实现索引内容的展示,图片展示实现文本分类,排序等基础功能索引数据量>1K (可自行爬取)每次完成搜索能够进行一次评价一次检索效率可做毕设/可做项目/大创

1.1、项目效果图展示

1.1.1前端页面展示:

1.1.2数据库数据展示:

二、所用技术栈

SpringBootThymeleaf模板渲染mysqlik中文分词lucene 索引json转换HTML+CSS+JavaScript

2.1项目版本信息:

jdk1.8mysql 5.7.29lucene 7.7.2maven 3.6.3Windows 10系统IntellJ IDEA 2019 2.14Navicat for mysql 12.1.2

三、项目技术理论基础篇

本项目的重点是搜索/索引。所以我们首先认识一下所谓的搜索功能。

传统的搜索功能流程如图01-00.

图01-00

以上搜索功能是目前企业中较为传统的一种搜索方式,其特点就是数据量少,承载不了高并发。

本项目所采用的搜索理论基础方案如图01-01.

图01-01

使用新方案的优势:

降低了数据库压力提升了数据库访问速度通过lucene的API操作索引库访问数据库实现了业务与数据的有效隔离

数据查询有两种方案:

顺序查询

所谓顺序查询就是通过用户检索的内容进行字符串匹配,遍历所有的文档,当匹配到相同字符串便查询到当前文件,没有查到则继续扫描下一个文件,直到扫描完成所有文件。

倒排索引

倒排索引是指先将海量数据进行分词,形成一个索引表,查询时先查询索引表,通过索引表查询指定文件,这样可以做到有效去重查询相同内容文本的时间。为了做到倒排索引,我们才用的则是全文检索技术------​​lucene​​

3.1、Lucene相关认识(需要你认识到)

lucene是一种技术架构,不是一个成型的技术产品,而是半产品。lucene是一个工具包,我们可以利用它完成索引工具的开发,制作属于自己的搜索引擎产品Lucene在Java开发环境里是一个免费成熟的源代码工具Lucene可以通过官方网站-,当然我也会提供-包链接()Lucene是Apache公司的产品Lucene实现全文检索的基本流程图:

原始文档数据:

可以自行爬取数据,也可以用小哥提供的文档数据文档数据放在小哥配套的文件夹(DataSources)里,是一个mysql文件,大家可以直接导入mysql即可。

文档:

拿到原始文档数据是为了建立索引,在索引前需要将原始内容创建文当​​Document​​,文档​​Document​​中包含了许多域​​Field​​

分析文档(分词):分析文档就是分词。将文档中的内容进行词组划分。索引文档:索引文档是为了更好地搜索。分词形成了词汇单元,通过索引词汇单元快速找到需要被索引到的内容。

四、项目实战篇

4.1 Lucene的-

可以通过官方网站-lucene,也可以在小哥留的资料包里-

解压后:

PS:​​queryparser​​:查询解析器

使用以上三个文件就可以实现本次项目中Lucene的功能。

4.2数据源-

也在这个文件夹下面:

导入到mysql的效果:

4.3Java工程的创建

使用 ​​DAO​​接口实现类获取mysql中的数据:

package cn.linghu.dao;import cn.linghu.pojo.Sku;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;/** * */public class SkuDaoImpl implements SkuDao { public List querySkuList() { // 数据库链接 Connection connection = null; // 预编译statement PreparedStatement preparedStatement = null; // 结果集 ResultSet resultSet = null; // 商品列表 List list = new ArrayList(); try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lucene", "root", "123456"); // SQL语句 String sql = "SELECT * FROM tb_sku"; // 创建preparedStatement preparedStatement = connection.prepareStatement(sql); // 获取结果集 resultSet = preparedStatement.executeQuery(); // 结果集解析 while (resultSet.next()) { Sku sku = new Sku(); sku.setId(resultSet.getString("id")); sku.setName(resultSet.getString("name")); sku.setSpec(resultSet.getString("spec")); sku.setBrandName(resultSet.getString("brand_name")); sku.setCategoryName(resultSet.getString("category_name")); sku.setImage(resultSet.getString("image")); sku.setNum(resultSet.getInt("num")); sku.setPrice(resultSet.getInt("price")); sku.setSaleNum(resultSet.getInt("sale_num")); list.add(sku); } } catch (Exception e) { e.printStackTrace(); } return list; }}

4.3.1核心代码------实现索引流程:

在E盘创建一个文件夹名为 ​​dir​​​作为我们的索引文件目录,执行代码成功之后, ​​dir​​文件夹内会出现如图:

出现此图表示创建索引成功!

4.3.2pom文件中的依赖引入

标签:js 数据
上一篇:微信小程序轮播图功能开发实例(小程序轮播图实现)
下一篇:微信小程序组件:action-sheet显示操作菜单解读和分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~