暂时搁浅。。。
因为一个小想法,花一点时间来实现一个简单的搜索,功能非常简单,第一次实现,以后再慢慢完善,增加网络爬虫获取数据源,优化查询算法等等
首先想到需要用到技术:
JavaWeb 实现
MySQL 存储数据源
Ajax 无刷新显示检索数据
1.建立数据源
新建一个数据库search,新建一张表search_source,编写一些测试数据
# Host: 127.0.0.1 (Version: 5.5.40)
# Date: 2017-08-07 11:05:49
# Generator: MySQL-Front 5.3 (Build 4.120)
/*!40101 SET NAMES utf8 */;
CREATE TABLE `search_source` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`iteam` varchar(255) DEFAULT NULL COMMENT "待检所内容",
`status` int(1) NOT NULL DEFAULT "0" COMMENT "状态",
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT="检索数据源";
#
# Data for table "search_source"
#
INSERT INTO `search_source` VALUES
(1,"我喜欢学习Java",0),
(2,"我喜欢学习python",0),
(3,"我喜欢学习PHP",0),
(4,"我喜欢学习MySQL",0),
(5,"我喜欢学习编程",0),
(6,"我喜欢学习学习",0);
2.编写实现项目
在这里我们使用之前搭建好的SSM框架来实现,不用用就太浪费了,哈哈哈
没有搭建好SSM的请点击
项目思路就是然后在网页输入:学习+空格+Java,字符串通过空格切割,得到‘学习’,‘Java’两个关键词,然后拿着关键词去数据库匹配 select * from 表名 where 字段名 like "values" 得到相关的数据存入链表中,使用Set来达到去重的目的,在页面进行展示数据。
编写Java代码
新建cn.SpringDemo.model.Datas.SearchDAO.java
package cn.SpringDemo.dao;
import java.util.List;
import cn.SpringDemo.model.Datas;
/**
* 搜索DAO层
* @author yezi
*
*/
public interface SearchDAO {
/**
* 通过录入关键词获取匹配数据
*/
public List getAllDatasbyKey(String key);
}
新建mapper/SearchMapper.xml
select * from search_source where iteam like #{key}
新建cn.SpringDemo.service.SearchService.java
package cn.SpringDemo.service;
import java.util.Set;
import cn.SpringDemo.model.Datas;
import cn.SpringDemo.model.result.ResultDO;
/**
* 搜索服务接口层
* @author yezi
*
*/
public interface SearchService {
/**
* 通过录入字符串获取匹配数据
*/
public ResultDO> getAllDatasbyKeys(String keys);
}
新建cn.SpringDemo.service.impl.SearchServiceImpl.java
package cn.SpringDemo.service.impl;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.SpringDemo.dao.SearchDAO;
import cn.SpringDemo.model.Datas;
import cn.SpringDemo.model.result.ResultDO;
import cn.SpringDemo.service.SearchService;
/**
* 搜索服务实现层
* @author yezi
*
*/
@Service("searchService")
public class SearchServiceImpl implements SearchService{
@Autowired
private SearchDAO searchDAO;
//通过录入字符串获取匹配数据
@Override
public ResultDO> getAllDatasbyKeys(String keys) {
ResultDO> datasDo = new ResultDO<>();
Set datas = new HashSet<>();
//判断数据的有效性
if(keys==null||keys.equals("")){
return datasDo;
}
//通过空格切割字符串
String [] key = keys.split(" ");
//循环获取数据
for (String k : key) {
List data = searchDAO.getAllDatasbyKey("%"+k+"%");
System.out.println(k+"个数"+data.size());
if(data!=null&&!data.isEmpty()){
for (Datas d : data) {
datas.add(d.getIteam());
}
}
}
if(datas.isEmpty()){
return datasDo;
}
datasDo.setResult(datas);
return datasDo;
}
}
编写测试类test/UserTest.java
package cn.SpringDemo.test;
import java.util.List;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.SpringDemo.model.User;
import cn.SpringDemo.model.result.ResultDO;
import cn.SpringDemo.service.SearchService;
import cn.SpringDemo.service.UserService;
public class UserTest {
private UserService userService;
private SearchService searchService;
@Before
public void before() {
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "classpath:conf/spring.xml", "classpath:conf/spring-mybatis.xml" });
userService = (UserService) context.getBean("userService");
searchService = (SearchService) context.getBean("searchService");
}
/**
* 获取结果集
*/
@Test
public void getAllDatasbyKeys() {
String keys = "Java 编程";
ResultDO> keyDO = searchService.getAllDatasbyKeys(keys);
Set datas = keyDO.getResult();
System.out.println(keys+"个数"+datas.size());
System.out.println("----------查询结果-----------------------");
for (String data : datas) {
System.out.println(data);
}
}
}
跑一下测试代码
接下来实现页面