Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu之类的搜索引擎, 还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql Server 2000进行建立索引,然后进行全文索引。至于数据库的内容,可以是网页的内容,还是其它的。本文中数据库的内容是图书馆管理系统中的某个作者表- Authors表。
因为考虑到篇幅的问题,所以该文不会讲的很详细,也不可能讲的很深。
本文以这样的结构进行:
1.介绍数据库中Authors表的结构
2.为数据库建立索引
3.为数据库建立查询功能
4.在web界面下进行查询并显示结果
1.介绍数据库中Authors表的结构
字段名称 字段类型 字段含义
Au_id Varchar(11) 作者号
Au_name Varchar(60) 作者名
Phone Char(12) 电话号码
Address Varchar(40) 地址
City Varchar(20) 城市
State Char(2) 省份
Zip Char(5) 邮编
contract Bit(1) 外键(关系不大)
表中的部分内容:
2.为数据库建立索引
首先建立一个类TestLucene.java。这个类就是对数据库进行建立索引,编写查询条件等。
当然,最开始就是建立数据库连接。连接代码这里就省略了。^_^
接着,新建一个方法getResutl(String),它返回的是数据库表Authors的内容。具体代码如下:
public ResultSet getResult(String sql){
try{
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
return rs;
}
catch(SQLException e){
System.out.println(e);
}
return null;
}
然后,为数据库建立索引。
首先要定义一个IndexWriter(),它是将索引写进Lucene自己的数据库中,它存放的位置是有你自己定义的。在定义IndexWriter 是需要指定它的分析器。Lucene自己自带有几个分析器,例如:StandarAnalyzer(),SimpleAnalyzer(), StopAnalyzer()等。它作用是对文本进行分析,判断如何进行切词。
接着,要定义一个Document。Document相当于二维表中一行数据一样。Document里包含的是Field字段,Field相当于数据库中一列,也就是一个属性,一个字段。
最后应该对IndexWriter进行优化,方法很简单,就是writer.optimize().
具体代码如下:
public void Index(ResultSet rs){
try{
IndexWriter writer = new IndexWriter("d:/index/", getAnalyzer(), true);
while(rs.next()){
Document doc=new Document();
doc.add(Field.Keyword("id",rs.getString("au_id")));
doc.add(Field.Text("name",rs.getString("au_name")));
doc.add(Field.UnIndexed("address",rs.getString("address")));
doc.add(Field.UnIndexed("phone",rs.getString("phone")));
doc.add(Field.Text("City",rs.getString("city")));
writer.addDocument(doc);
}
writer.optimize();
writer.close();
}
catch(IOException e){
System.out.println(e);
}
catch(SQLException e){
System.out.println(e);
}
}
public Analyzer getAnalyzer(){
return new StandardAnalyzer();
}
3.为数据库建立查询功能
在类TestLucene中建立一个新的方法searcher(String),它返回的是一个搜索的结构集,相当于数据库中的ResultSet一样。它代的参数是你要查询的内容。这里,我把要查询的字段写死了。你可以在添加一个参数表示要查询的字段。
这里主要有两个对象IndexSearcher和Query。IndexSearcher是找到索引数据库,Query是处理搜索,它包含了三个参数:查询内容,查询字段,分析器。
具体代码如下:
public Hits seacher(String queryString){
Hits hits=null;;
try{
IndexSearcher is = new IndexSearcher("D:/index/");
Query query=QueryParser.parse(queryString,"City",getAnalyzer());
hits=is.search(query);
}catch(Exception e){
System.out.print(e);
}
return hits;
}
4.在web界面下进行查询并显示结果
这里建立一个Jsp页面TestLucene.jsp进行搜索。
在TestLucene.jsp页面中首先引入类
<%@ page import="lucenetest.LucentTest"%>
<%@ page import="org.apache.lucene.search.*,org.apache.lucene.document.*" %>
然后定义一个LuceneTest对象,获取查询结果集:
LucentTest lucent=new LucentTest();
Hits hits=lucent.seacher(request.getParameter("queryString"));
定义一个Form,建立一个查询环境:
<form action="TestLucene.jsp">
<input type="text" name="queryString"/>
<input type="submit" value="搜索"/>
</form>
显示查询结果:
<table>
<%if(hits!=null){%>
<tr>
<td>作者号</td>
<td>作者名</td>
<td>地址</td>
<td>电话号码</td>
</tr>
<% for(int i=0;i<hits.length();i++){
Document doc=hits.doc(i);
%>
<tr>
<td><%=doc.get("id") %></td>
<td><%=doc.get("name") %></td>
<td><%=doc.get("address") %></td>
<td><%=doc.get("phone") %></td>
</tr>
<% }}%>
</table>
相关推荐
这是我学LUCENE索引数据库表并且搜索相关字段的时期整理出来的几个不错的资料,我觉得里面总有一款会适合你,而且你所需要知道的技术里面基本上都是涵盖的,所以可以当作教材或者参考手册使用。
Lucene_索引数据库.doc
用lucene对数据库建立索引及搜索.doc
关于lucene对数据库建立索引和进行查询。这方面的东西太少了。大家应该多上传一些资料。
lucene建立数据库索引的问题,在这里,把其中的一些问题补充说明,希望对大家有新的帮助,希望大家相互提出问题,相互学习,共同进步!!
在Eclipse环境中运用java,Lucene建索引及查询关键字
关于Lucene对数据操作,详细信息请见文档
这是一个结合Lucene 对数据库索引的一个真正的实例。它反应了Lucene 的基础原理
第一章 Lucene是个倒排索引 第二章 Lucene与数据库 第三章 Lucene的索引建立及文件结构 第四章 Lucene的检索机制及文档得分 第五章 Lucene的存储优化 第六章 Lucene的效率优化 第七章 用Lucene加快web开发!
编写对索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的ID
lucene3针对数据库索引操作,示例源码+解读。
lucene与sqlserver数据库实现索引的简单实例lucene与sqlserver数据库实现索引的简单实例
用Lucene.net对数据库建立索引及搜索
针对传统数据库检索中检索速度较慢、检索结果不完整、检索结果排列无序等问题,基于全文检索工具Lucene索引的结构,设计一种基于 Lucene 的数据库索引结构,并提出记录倒排索引链表的概念,使网站不用再按照传统顺序查找...
结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等
为了快速查询,加快查询速度,减少与数据库交互,经常需要用到lucene实现创建索引和查询
内容分为两部分:第一部分是Lucence的介绍,包括索引过程和搜索过程;第二部分是代码示例,也是重点部分。
lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt ...
基于数据库的lucene3。索引构建类代码
这是用Lucene.NET结合Sql建立全文检索Demo的源码,适合初学者学习Lucene,其中包含所需的DLL文件。