`
NealCai
  • 浏览: 144464 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

运用lucene+庖丁解牛分词器,集成ssh,对数据库全文搜索

阅读更多
用lucene+庖丁解牛主要是要完成对数据库比如某张表单的某些字段的搜索,由于lucene本身对中文支持非常不好,像StandardAnalyzer基本都是一个字一个字匹配的,而用了庖丁解牛分词之后主要是它有一个dic字典,进行分词,效率很高。
首先我封装了一个lucene类,为了简单一点,对数据库操作直接用jdbc进行数据库操作

package lucene;

import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;

import com.model.searchResult;

public class lucene {

private String searchString;
private List<searchResult> list = new ArrayList<searchResult>();;

public List<searchResult> getList() {
return list;
}

public void setList(List<searchResult> list) {
this.list = list;
}

public lucene() {
}

public lucene(String searchString) {
this.setSearchString(searchString);
}

public void setSearchString(String searchString) {
this.searchString = searchString;
}

public String getSearchString() {
return searchString;
}

// 对于name属性进行全文搜索,返回hits值
public Hits seacher(String queryString) {
Hits hits = null;

try {
File indexFile = new File("d:/index/");
IndexReader reader = IndexReader.open(indexFile);
Analyzer analyzer = new PaodingAnalyzer();
QueryParser parser = new QueryParser("name", analyzer);
IndexSearcher searcher = new IndexSearcher(reader);
Query query = parser.parse(queryString);
hits = searcher.search(query);

} catch (Exception e) {
System.out.print(e);
}
return hits;
}

//创建索引
public void indexCreateUtil() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/rent";
String user = "root";
String password = "111111";
//查询所有房屋信息放在index索引中
String query = "select a.house_id,a.house_name,b.house_type_name,house_rent_type_name,a.single_day_price from t_house a,t_house_type b,t_house_rent_type c where a.house_type_id=b.house_type_id and a.house_rent_type_id=c.house_rent_type_id";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);

if (!conn.isClosed())
System.out.println("数据库连接成功!");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
Analyzer analyzer = new PaodingAnalyzer();
try {
// 使用索引文件夹,庖丁解牛分词器创建IndexWriter
IndexWriter indexWriter = new IndexWriter("d:/index/",
analyzer, true);

while (rs.next()) {
Document doc = new Document();
doc.add(new Field("id", rs.getString("house_id"),
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.NO));
doc.add(new Field("name", rs.getString("house_name"),
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.NO));
doc.add(new Field("type_name", rs
.getString("house_type_name"), Field.Store.YES,
Field.Index.TOKENIZED, Field.TermVector.NO));
doc.add(new Field("rent_name", rs
.getString("house_rent_type_name"),
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.NO));
doc.add(new Field("price",
rs.getString("single_day_price"), Field.Store.YES,
Field.Index.TOKENIZED, Field.TermVector.NO));

indexWriter.addDocument(doc);
}
//优化
indexWriter.optimize();
indexWriter.close();
} catch (IOException e) {

e.printStackTrace();
}
conn.close();
} catch (ClassNotFoundException e) {
System.out.println("找不到驱动程序");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}

//用索引搜索,并加入list
public List<searchResult> indexSearchUtil(String search) {
Hits hits = seacher(search);

for (int i = 0; i < hits.length(); i++) {
try {
Document doc = hits.doc(i);
int id = Integer.parseInt(doc.get("id"));
String name = doc.get("name");
String type_name = doc.get("type_name");
String rent_name = doc.get("rent_name");
int price = Integer.parseInt(doc.get("price"));
// System.out.println(id + "" + name + "" + type_name + ""
// + rent_name + "" + price);

// List<searchResult> list = new ArrayList<searchResult>();
searchResult sr = new searchResult();
sr.setHouse_id(id);
sr.setHouse_name(name);
sr.setHouse_rent_name(rent_name);
sr.setHouse_type_name(type_name);
sr.setSingle_day_price(price);
list.add(sr);
} catch (IOException e) {

e.printStackTrace();
}
}
return list;
}
}

然后在luceneSearchAction.java中调用
package action;

import java.util.List;

import com.opensymphony.xwork2.ActionContext;

import lucene.lucene;

public class luceneSearchAction implements action {
private String searchContent;
private List house_list;

public String getSearchContent() {
return searchContent;
}

public void setSearchContent(String searchContent) {
this.searchContent = searchContent;
}

public List getHouse_list() {
return house_list;
}

public void setHouse_list(List house_list) {
this.house_list = house_list;
}

public String execute() throws Exception {
lucene lucene = new lucene();
lucene.indexCreateUtil();
lucene.indexSearchUtil(searchContent);
ActionContext.getContext().getSession()
.put("house_list", lucene.getList());
return SUCCESS;
}
}

最后在页面上调用
<c:forEach items="${house_list}" var="orderItem">
${orderItem.house_id}
${orderItem.house_name}
...
...
</c:forEach>




分享到:
评论

相关推荐

    lucene3庖丁解牛中文分词器

    《深入剖析:Lucene3与庖丁解牛中文分词器》 在信息技术飞速发展的今天,全文检索和搜索引擎已经成为日常开发中不可或缺的部分。Lucene作为一款强大的全文检索库,被广泛应用于各种信息检索系统中。然而,对于中文...

    paoding analysis 3.0.1 jar (庖丁解牛分词器)

    由于庖丁官方目前提供可下载尚不支持Lucene 3.0以上版本。因此作者对paoding进行重新编译,使其与最新Lucene 3.0.1版本适用。 Latest paoding 3.0.1 for lucene 3.0.1 使用说明: 先下载2.0.4的版本(h t t p : / ...

    lucene 中文分词 庖丁解牛

    《Lucene中文分词:庖丁解牛》 在信息技术高速发展的今天,全文搜索引擎已经成为网站内容检索不可或缺的一部分。其中,Apache Lucene作为一个开源的全文检索库,被广泛应用于各种项目中,尤其对于处理中文文本,...

    sorlr + tomcat+ 庖丁解牛中文分词 配置文档

    标题 "sorlr + tomcat+ 庖丁解牛中文分词 配置文档" 提到的是一个关于在Apache Solr中集成Tomcat服务器,并利用庖丁解牛中文分词工具进行中文处理的配置教程。这个配置过程对于搭建支持中文搜索的Solr环境至关重要。...

    lucene中文分词(庖丁解牛)庖丁分词

    5. 搜索优化:在搜索阶段,同样可以使用庖丁分词器对用户输入的查询进行预处理,提高搜索的精确度。 四、庖丁分词的高级特性 1. 自定义词典:除了预设的词典,还可以通过编程方式动态加载自定义词典,适应变化的...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--dic

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    适用于lucene..5的庖丁解牛分词器

    可以适用于lucene3.5的庖丁解牛分词器jar包

    Lucene 庖丁解牛分词法2.4版本jar包

    在实际应用中,例如建立一个新闻网站的全文检索系统,开发者可以利用"庖丁解牛分词法"对新闻内容进行预处理,将每篇新闻文本拆分成关键词,再用Lucene建立索引。当用户输入查询词时,系统将使用相同的分词逻辑进行...

    Lucene加庖丁解牛测试类

    本文将深入探讨“Lucene加庖丁解牛测试类”,旨在帮助读者理解Lucene的核心概念,并通过实际的测试类解析,提升对Lucene的运用能力。 首先,我们需要理解“庖丁解牛”的含义。这源自古代典故,意指做事技艺娴熟,能...

    lucene Analyzer 庖丁解牛 中文分词

    在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用于各种系统中。其核心功能之一就是对输入文本进行高效精准的分词处理,以便进行后续的索引和查询操作。本文将深入探讨Lucene的Analyzer组件,以及它...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    lucene+中文IK分词器 例子

    **Lucene+中文IK分词器实例解析** Lucene是一个高性能、全文检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API...通过这个实例,开发者可以更好地理解和掌握Lucene与IK分词器在中文全文搜索中的应用。

    lucene3.0 整合庖丁解牛实例

    实例是一个java实例,可直接导入到MyEclipse中...其中是lucene3.0整合了庖丁解牛分词法,添加了高亮显示。因为lucene3.0无法整合paoding-analysis.jar 所以我已经把paoding-analysis中的源码整合进来了避免无法整合问题

    lucene6.6+拼音分词+ik中文分词包

    在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用。在处理中文文本时,分词是至关重要的一步,它决定了搜索的精度和效果。本文将详细讲解如何在Lucene 6.6版本中结合拼音分词和IK中文分词,以及如何...

    庖丁解牛,一种中文分词器

    "庖丁解牛"分词器可以方便地与Lucene进行集成,用于提升搜索系统的中文处理能力。在集成到Lucene 3.0版本时,由于版本间的接口和功能可能会有所变化,因此可能需要进行一些适应性修改。这通常涉及到调整配置文件、...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    Lucene+compass+spring+jdbc+庖丁的一个例子

    标题中的“Lucene+compass+spring+jdbc+庖丁的一个例子”揭示了这是一个关于整合多个技术来构建一个搜索系统的示例。在这个系统中,我们有以下几个关键组件: 1. **Lucene**: Apache Lucene 是一个高性能、全文本...

Global site tag (gtag.js) - Google Analytics