在上一节中,我们使用了HashMap来模拟trie字典树,通过使用字典树,我们就能够将一段字符串中的关键词给提取出来。
那么现在我们要实现两件事情即可:
一、数据导入
问题所在:
所谓巧妇难为无米之炊,虽然我不是巧妇,也不会做饭,但我会吃啊~
回归正题,既然是做搜索,那你至少得有数据,有人会说:直接用数据库不就好了?
显然这样是不行得,数据库封装得太好了,因此你根本无法修改它的内部结构,而它本身的内部结构也不适合做我们想要的全站搜索。
这个时候我们就需要自己搭建一个数据库来解决问题了。
解决办法:
解决办法其实比较简单,我们直接通过jdbc的方式,把所有的跟搜索相关的表数据全部导入到内存的一个数组上就好了。
测试表sql语句如下:
create table goods(
id int auto_increment primary key,
name VARCHAR(40) not null,
price int not null
)
INSERT INTO goods values(null,"高露洁牙膏",720);
INSERT INTO goods values(null,'黑人牙膏',720);
INSERT INTO goods values(null,'黑妹牙膏',720);
INSERT INTO goods values(null,'千与千寻电影',720);
INSERT INTO goods values(null,'螺旋炮弹',720);
INSERT INTO goods values(null,'韩款男士风衣',720);
INSERT INTO goods values(null,'李白桦红笔',720);
INSERT INTO goods values(null,'修身款白色衬衣',720);
INSERT INTO goods values(null,'修仙辟谷丹',720);
INSERT INTO goods values(null,'999感冒灵颗粒',720);
接下来就是编写程序,将sql语句导入到内存的一个数组上。
这个很基础,没啥好说的,不过为了省事我并没有封装的很彻底,所以如果想通用的话还需要自己动动脑筋哦~
public class ElasticSearchTest {
private ArrayList<Map<String,String>> goods = new ArrayList<Map<String,String>>();
//初始化数组的方法,从数据库读取数据到数组
public void init(){
//有一说一,jdbc好恶心,我纯凭映像敲了五六分钟才出来
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {