用lucene替代mysql读库的尝试
采用lucene对mysql中的表建索引,并替代全文检索操作。
备注:代码临时梳理很粗糙,后续修改。
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date; import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version; public class App { private static Directory dir = null; /**
* @param args
*/
public static void main(String[] args) { try {
initIndex();
searchBylucene();
searchByMysql();
} catch (IOException | ParseException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //创建索引
private static void initIndex() throws IOException{ dir = FSDirectory.open(new File("E:\\index")); Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(
Version.LUCENE_4_10_2, analyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, iwc); Connection conn = null; conn = DbUtil.getcon(); Statement stmt; try {
stmt = conn.createStatement();
String sql = "select * from t_content";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) { Document doc = new Document();
doc.add(new StringField("id", rs.getString(1), Field.Store.YES));
doc.add(new StringField("content",
rs.getString(2),
Field.Store.YES)); writer.addDocument(doc);
}
} catch (SQLException e) {
e.printStackTrace();
DbUtil.Close(conn);
}finally {
DbUtil.Close(conn);
writer.close();
}
} private static void searchByMysql() throws SQLException{
Connection conn = null; Date date1 = new Date();
conn = DbUtil.getcon();
Statement stmt = conn.createStatement(); String sql = "select * from t_content where content like '%内马尔%'";
ResultSet rs = stmt.executeQuery(sql); Date date2 = new Date(); System.out.println("Mysql:" + String.valueOf(date2.getTime() - date1.getTime())); int i= 0; while (rs.next()) {
//System.out.println(rs.getString(2));
i++;
} System.out.println(i); } private static void searchBylucene() throws IOException, ParseException{
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
Date date1 = new Date();
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query query = parser.parse("内马尔"); TopDocs rs = searcher.search(query, null, 10);
Date date2 = new Date(); System.out.println("lucene:" + String.valueOf(date2.getTime() - date1.getTime()));
System.out.println(rs.totalHits);
if(rs.totalHits != 0){
ScoreDoc[] hits = rs.scoreDocs;
//System.out.println(searcher.doc(rs.scoreDocs[0].doc));
}
//System.out.println("end");
}
}
用lucene替代mysql读库的尝试的更多相关文章
- Buildroot MariaDB替代MySQL
/********************************************************************************* * Buildroot Maria ...
- mysql sqlmap 注入尝试
假设注入点为 http://www.abc.com/news.php?id=12 //探测数据库信息 sqlmap -u http://www.abc.com/news.php?id=12 –dbs ...
- mariadb是替代MySQL的好方式
像Oracle这样成熟稳定的数据库,足以支撑海量数据的存储与查询了?为什么还需要数据切片呢?的确,Oracle的DB确实很成熟很稳定,但是高昂的使用费用和高端的硬件支撑不是每一个公司能支付的起的.试想 ...
- centos 安装mariadb 替代mysql
yum install mariadb-server mariadb systemctl start mariadbmysql -uroot -p默认密码mysql -uroot -pmysql_se ...
- 心动不如行动,基于Docker安装关系型数据库PostgrelSQL替代Mysql
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_171 最近"全栈数据库"的概念甚嚣尘上,主角就是PostgrelSQL,它最近这几年的技术发展不可谓不猛,覆盖 ...
- Golang实现mysql读库映射成Map【Easy】
这个类库灵感来源于.net的dbHelper类,因为其简单易用,现在go的driver必须使用对象映射,这让人火大不爽,不能实现灵活的Map,在Key经常变动的业务场景里面非常不爽,我还是喜欢直接写s ...
- SQL-MySQL使用教程-对MySQL的初步尝试
出现问题:中文无法显示.存储:不对任何数据做检测,只管理数据类型.
- lucene索引并搜索mysql数据库[转]
由于对lucene比较感兴趣,本人在网上找了点资料,终于成功地用lucene对mysql数据库进行索引创建并成功搜索,先总结如下: 首先介绍一个jdbc工具类,用于得到Connection对象: im ...
- 开源搜索引擎评估:lucene sphinx elasticsearch
开源搜索引擎评估:lucene sphinx elasticsearch 开源搜索引擎程序有3大类 lucene系,java开发,包括solr和elasticsearch sphinx,c++开发,简 ...
随机推荐
- webapi - 使用依赖注入
本篇将要和大家分享的是webapi中如何使用依赖注入,依赖注入这个东西在接口中常用,实际工作中也用的比较频繁,因此这里分享两种在api中依赖注入的方式Ninject和Unity:由于快过年这段时间打算 ...
- C语言 · 数位分离
问题描述 编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示. 输入格式:输入只有一行,即一个1000以内的正整数. 输出格式:输出只有一行,即该整数的每 ...
- Linux常用命令操作
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- 玩转spring boot——结合redis
一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...
- CSS知识总结(九)
CSS常用样式 10.自定义动画 1)关键帧(keyframes) 被称为关键帧,其类似于Flash中的关键帧. 在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“ ...
- 修改session垃圾回收几率
<?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...
- java中if和switch哪个效率快
首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断:而 switch 只能对基本类型进行数值比较.两者的可比性就仅限在两个基本类型比较的范围内.说到基本类型 ...
- 编译器开发系列--Ocelot语言2.变量引用的消解
"变量引用的消解"是指确定具体指向哪个变量.例如变量"i"可能是全局变量i,也可能是静态变量i,还可能是局部变量i.通过这个过程来消除这样的不确定性,确定所引用 ...
- mysql-5.6.34 Installation from Source code
Took me a while to suffer from the first successful souce code installation of mysql-5.6.34. Just pu ...
- 跟着老男孩教育学Python开发【第三篇】:Python函数
set 无序,不重复,可嵌套. 函数 创建函数: 1.def关键字,创建函数 2.函数名 3.() 4.函数体 5.返回值 发邮件函数 def sendmail(): import smtpl ...