- 浏览: 374350 次
文章分类
最新评论
-
strchi:
这个网站,什么都没有了
做小说搜索网站,这个是不是有可能会侵权的呢? -
从此醉:
楼主倒是给出解决办法啊
Java虚拟机支持的最大内存限制 -
kjmmlzq19851226:
又要增强客户体验,又要降低伪造攻击的概率,╮(╯▽╰)╭,程序 ...
Web安全测试之跨站请求伪造(CSRF)篇(图) -
zhangxinze:
linux下使用Java获取客户端ip地址?大家有何高见,我现 ...
怎样用Java来获取真实的IP地址 -
k_kid9157:
学习 感谢分享:-)
log4j的ConversionPattern参数的格式含义
Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。
为了更快的体验lucene.本文作者写了一个比较简单的类.大家可以上http://www.bt285.cn BT下载 或是http://www.5a520.cn 小说520网看看其效果.
public class BtLucene {
private static Logger logger = Logger.getLogger(BtLucene.class);
public static String[] StopStrs = {"BT285","BT软件","BT电影","BT下载"};
/** *//**
* 查询
* @param queryStr
* @param lucennePath
* @return
* @throws Exception
*/
public LuceneModel query(String queryStr,String lucennePath) throws Exception {
String queryUTF8 = URLDecoder.decode(queryStr,"UTF-8");
LuceneModel luceneModel = new LuceneModel();
List<LuceneInfo> lucneneInfoList = new ArrayList<LuceneInfo>();
long begin = System.currentTimeMillis();
Document doc = new Document();
StandardAnalyzer analyzer = new StandardAnalyzer(StopStrs);
// 一段简单的检索代码
QueryParser queryParser = new QueryParser("title", analyzer);
Query query = queryParser.parse(queryUTF8);
// 检索
Searcher searcher = new IndexSearcher(lucennePath);// "index"指定索引文件位置
Hits hits = searcher.search(query);
int size = hits.length();
// 打印结果值集
if(logger.isDebugEnabled()){
logger.debug("result size is " + size);
}
luceneModel.setSize(size);
for (int i = 0; i < size; i++) {
LuceneInfo lucneneInfo = new LuceneInfo();
doc = hits.doc(i);
String id = doc.get("id");
String title = doc.get("title");
String[] splitTitle = title.split(queryUTF8);
lucneneInfo.setId(id);
if(splitTitle.length >1)
lucneneInfo.setTitle(splitTitle[0]+ "<font color=#C60A00>" +queryUTF8 +"</font>" + splitTitle[1]);
else
lucneneInfo.setTitle(splitTitle[0]+ "<font color=#C60A00>" +queryUTF8 +"</font>");
lucneneInfo.setTrip(title);
lucneneInfoList.add(lucneneInfo);
if(i==200)
break;
}
long needsTime = (System.currentTimeMillis()-begin);
long compiteTime = needsTime/1000;
luceneModel.setTime(String.valueOf(compiteTime));
luceneModel.setLuceneInfoList(lucneneInfoList);
logger.info("query the " + queryUTF8 + " needs " + needsTime +" ms" );
return luceneModel;
}
/** *//**
* 建立索引
* @throws Exception
*/
public void batchCreate() throws Exception {
Configure.propertiesConfigure();
BtBatchContentCreate contentCreate = new BtBatchContentCreate();
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
"./mysqlContext.xml");
WNewsDAO newsDAO = (WNewsDAO) appContext.getBean("wNewDaoProxy");
Bt285DAO bt285DAO = (Bt285DAO) appContext.getBean("bt285DAO");
contentCreate.setNewsDAO(newsDAO);
contentCreate.setBt285DAO(bt285DAO);
LieService lieService = (LieService) appContext.getBean("lieService");
contentCreate.setLieService(lieService);
StandardAnalyzer analyzer = new StandardAnalyzer(StopStrs);
IndexWriter writer = new IndexWriter(Configure.getCreateBtLucenePath(), analyzer, true);
for (int i = 1; i < 214; i++) {
Page page = new Page();
logger.info("i=" + i);
page.setPageIndex(i);
page.setPageSize(1000);
List<Bt285> list = bt285DAO.findPageByQuery(
"select t from Bt285 t ",null, page);
for (Bt285 news : list) {
logger.debug("news Id=" + news.getId());
// 添加一条文档
Document doc = new Document();
String title = news.getTitle();
String newTitle = null;
if(title == null)
title ="no title";
newTitle = title.replace("|BT285.cn|BT下载|BT电影|BT软件", "");
doc.add(new Field("id", String.valueOf(news.getId()), Field.Store.YES, Field.Index.NO));
doc.add(new Field("title", newTitle, Field.Store.YES,
Field.Index.TOKENIZED));
doc.setBoost(news.getId() * 10);
writer.addDocument(doc);
}
}
writer.optimize();
writer.close();
}
public static void main(String[] args) throws Exception {
System.out.println("server begin!");
Configure.propertiesConfigure();
BtLucene action = new BtLucene();
//action.batchCreate();
String path = Configure.getCreateBtLucenePath();
action.query("nba",path);
System.out.println(URLEncoder.encode("天兆","UTF-8"));//%E5%A4%A9%E5%85%86
System.out.println("server finish!");
}
}
private static Logger logger = Logger.getLogger(BtLucene.class);
public static String[] StopStrs = {"BT285","BT软件","BT电影","BT下载"};
/** *//**
* 查询
* @param queryStr
* @param lucennePath
* @return
* @throws Exception
*/
public LuceneModel query(String queryStr,String lucennePath) throws Exception {
String queryUTF8 = URLDecoder.decode(queryStr,"UTF-8");
LuceneModel luceneModel = new LuceneModel();
List<LuceneInfo> lucneneInfoList = new ArrayList<LuceneInfo>();
long begin = System.currentTimeMillis();
Document doc = new Document();
StandardAnalyzer analyzer = new StandardAnalyzer(StopStrs);
// 一段简单的检索代码
QueryParser queryParser = new QueryParser("title", analyzer);
Query query = queryParser.parse(queryUTF8);
// 检索
Searcher searcher = new IndexSearcher(lucennePath);// "index"指定索引文件位置
Hits hits = searcher.search(query);
int size = hits.length();
// 打印结果值集
if(logger.isDebugEnabled()){
logger.debug("result size is " + size);
}
luceneModel.setSize(size);
for (int i = 0; i < size; i++) {
LuceneInfo lucneneInfo = new LuceneInfo();
doc = hits.doc(i);
String id = doc.get("id");
String title = doc.get("title");
String[] splitTitle = title.split(queryUTF8);
lucneneInfo.setId(id);
if(splitTitle.length >1)
lucneneInfo.setTitle(splitTitle[0]+ "<font color=#C60A00>" +queryUTF8 +"</font>" + splitTitle[1]);
else
lucneneInfo.setTitle(splitTitle[0]+ "<font color=#C60A00>" +queryUTF8 +"</font>");
lucneneInfo.setTrip(title);
lucneneInfoList.add(lucneneInfo);
if(i==200)
break;
}
long needsTime = (System.currentTimeMillis()-begin);
long compiteTime = needsTime/1000;
luceneModel.setTime(String.valueOf(compiteTime));
luceneModel.setLuceneInfoList(lucneneInfoList);
logger.info("query the " + queryUTF8 + " needs " + needsTime +" ms" );
return luceneModel;
}
/** *//**
* 建立索引
* @throws Exception
*/
public void batchCreate() throws Exception {
Configure.propertiesConfigure();
BtBatchContentCreate contentCreate = new BtBatchContentCreate();
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
"./mysqlContext.xml");
WNewsDAO newsDAO = (WNewsDAO) appContext.getBean("wNewDaoProxy");
Bt285DAO bt285DAO = (Bt285DAO) appContext.getBean("bt285DAO");
contentCreate.setNewsDAO(newsDAO);
contentCreate.setBt285DAO(bt285DAO);
LieService lieService = (LieService) appContext.getBean("lieService");
contentCreate.setLieService(lieService);
StandardAnalyzer analyzer = new StandardAnalyzer(StopStrs);
IndexWriter writer = new IndexWriter(Configure.getCreateBtLucenePath(), analyzer, true);
for (int i = 1; i < 214; i++) {
Page page = new Page();
logger.info("i=" + i);
page.setPageIndex(i);
page.setPageSize(1000);
List<Bt285> list = bt285DAO.findPageByQuery(
"select t from Bt285 t ",null, page);
for (Bt285 news : list) {
logger.debug("news Id=" + news.getId());
// 添加一条文档
Document doc = new Document();
String title = news.getTitle();
String newTitle = null;
if(title == null)
title ="no title";
newTitle = title.replace("|BT285.cn|BT下载|BT电影|BT软件", "");
doc.add(new Field("id", String.valueOf(news.getId()), Field.Store.YES, Field.Index.NO));
doc.add(new Field("title", newTitle, Field.Store.YES,
Field.Index.TOKENIZED));
doc.setBoost(news.getId() * 10);
writer.addDocument(doc);
}
}
writer.optimize();
writer.close();
}
public static void main(String[] args) throws Exception {
System.out.println("server begin!");
Configure.propertiesConfigure();
BtLucene action = new BtLucene();
//action.batchCreate();
String path = Configure.getCreateBtLucenePath();
action.query("nba",path);
System.out.println(URLEncoder.encode("天兆","UTF-8"));//%E5%A4%A9%E5%85%86
System.out.println("server finish!");
}
}
http://www.bt285.cn/search/%E6%B3%95%E8%AF%81%E5%85%88%E9%94%8BII 搜索法证先锋II 出来的效果.
[TVB2008][法证先锋II ][粤语字幕][DVD-RMVB]
[TVB连续剧][法证先锋II][粤语中字][TV-RMVB]
发表评论
-
java资源获取分析
2009-11-27 14:41 2343在开发java程序的过程中,我们经常要做的一件事就是获取资源。 ... -
java字符集笔记
2009-05-25 19:05 1179概述 本文主要包括以 ... -
log4j的ConversionPattern参数的格式含义
2009-03-20 15:50 3172Log4j建议只使用四个级别,优先级从高到低分别是ERROR、 ... -
Apache HTTP Server 与 Tomcat 的三种连接方式介绍
2009-03-20 12:00 1252整合 Apache Http Server 和 Tomcat ... -
JavaScript不能做到的6,7事
2009-02-22 11:19 1227虽然在很多方面,JavaScr ... -
TreeMap的使用及注意事项
2008-10-30 20:58 2550TreeMap是红黑树算法 ... -
如何注意HttpSession的线程
2008-09-13 15:12 1417HttpSession session = req ... -
ThreadLocal相关知识2
2008-09-03 14:55 4369ThreadLocal与synchronized Java良好 ... -
ThreadLocal相关知识
2008-09-03 14:53 1616首先,ThreadLocal 不是用来解决共享对象的多线程访问 ... -
JAXP的介绍
2008-08-29 10:37 3839摘要: JAXP (全称Java API for XML P ... -
(转)Java虚拟机参数详解
2008-06-17 11:18 1809http://www.5a520.cn 小说520网 下面的讨 ... -
JAVA面试题(4)
2008-05-31 18:36 1314数据库方面: 1. 存储过 ... -
J2EE初学者需要理解的问题
2008-05-31 18:35 1103一、J2EE提出的背景 1、 ... -
JAVA面试题(3)
2008-05-31 18:32 4998一、Java基础知识1.Java有那些基本数据类型,Strin ... -
java面试题(续)
2008-05-29 21:15 11834. 多线程:在同一应用程序中,有多个顺序流同时执行。同步和异 ... -
java面试题
2008-05-29 21:13 1976应聘Java笔试时可能出现 ...
相关推荐
它提供了一个简单但功能强大的API,可以帮助开发者快速地在大量文档中实现高效的全文检索功能。在这个基于Struts2的全文检索系统中,Lucene扮演了核心的角色,负责文本的索引和查询。 **Struts2框架** Struts2是一...
**基于Lucene的检索会议期刊代码JSP展示** 在信息技术领域,搜索引擎的构建是一项关键任务,而Apache Lucene是...通过深入研究这些代码,开发者可以掌握如何在实际项目中运用Lucene进行全文检索,并利用JSP呈现结果。
它提供了一个简单的API,使得开发者可以轻松地在Java应用程序中集成全文检索功能。在这个基于Lucene的全文检索系统中,我们可以实现对本地文件的高效搜索,方便用户快速找到所需的文档。 **1. Lucene的基本概念** ...
**基于Lucene的全文检索框架** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。它提供了一个可扩展的、高效的文本搜索解决方案,适用于各种应用场景,包括网站搜索、文档检索、数据挖掘等。这个...
通过理解并熟练运用其创建索引和搜索的核心步骤,我们可以构建出高效、准确的信息检索系统,无论是简单的文档搜索还是复杂的商业应用,Lucene都能胜任。在实际项目中,结合`LuceneUtils.java`这样的工具类,可以简化...
总结,Lucene 5为开发者提供了强大且灵活的全文检索功能,通过深入学习其源码,尤其是拼音检索和分词器的运用,可以有效地提升搜索质量和用户体验。不断探索和实践,才能充分挖掘Lucene的潜力,为各种信息检索应用...
本篇文章将深入探讨如何在Lucene中利用正则表达式进行检索。 正则表达式是一种模式匹配语言,它允许我们用简洁的语法来描述一系列字符串。在Lucene中,我们可以使用Analyzer的TokenStream来处理正则表达式查询,...
Lucene是中国大百科全书式的全文检索库,它在...这些都是深入理解和运用Lucene时需要关注的点。 总之,Lucene是一个强大且灵活的全文检索工具,通过这个入门小例子,你可以逐步揭开其神秘的面纱,踏入文本搜索的世界。
通过深入理解并熟练运用Lucene 7.4.0,开发者可以构建出高性能、灵活且功能强大的全文搜索引擎,满足各种复杂的信息检索需求。这个压缩包提供的完整组件将帮助开发者快速上手并实现自己的搜索解决方案。
总的来说,“基于lucene 的简单搜索引擎.rar”提供的示例可能涵盖以上提到的基本流程,帮助初学者理解如何在实际项目中运用Lucene构建一个简单的搜索引擎。通过学习和实践,你可以逐步掌握Lucene的精髓,为更复杂的...
通过深入研究这个项目,开发者可以了解Lucene的工作原理,掌握搜索引擎的构建技巧,并且能够灵活运用到实际的项目中,提高数据检索的效率和用户体验。无论你是Java开发者还是对全文搜索感兴趣的IT人士,这个项目都是...
《深入剖析Lucene.NET:基于源代码的实例解析》 Lucene.NET,作为Apache Lucene的.NET版本,是一个高性能、全文...掌握这些基础知识,将有助于我们在实际项目中灵活运用Lucene.NET,实现高效、准确的全文检索服务。
本书《Lucene实战第二版》是一本关于如何使用Lucene进行文本检索的实用教程。这本书详细介绍了Lucene的使用方法和内部工作机制,并提供了丰富的代码示例和清晰的解释。它不仅适合那些计划在应用中使用Lucene的开发者...
Lucene是Apache软件基金会的一个开放源代码项目,它是一个高性能、全文本检索库,提供了Java实现的全文索引和搜索功能。Lucene不仅能够对文本进行索引,还可以对文档进行存储,使得搜索结果可以返回原始文档。它的...
《Lucene实战:深入解析与应用》 Lucene,作为Apache软件基金会的开源全文检索库,是Java领域中广泛使用的搜索引擎框架。...在不断实践中,你将能熟练运用Lucene,为你的应用程序增添强大的搜索能力。
以下是一个简单的Lucene索引创建示例: ```java Directory indexDir = FSDirectory.open(new File(INDEXDIR)); IndexWriter writer = new IndexWriter(indexDir, analyzer, true, MaxFieldLength.LIMITED); File ...
作为一款开源项目,Lucene为开发者提供了丰富的API,使得构建搜索引擎变得简单而高效。然而,随着时间的推移,Lucene已经发展到更高的版本,如现在的Lucene 8.x,但在一些特定的场景或对老版本有依赖的项目中,...
总的来说,掌握Lucene、Compass和Ajax的综合运用,将使开发者能够在Web应用中构建出强大且用户友好的搜索功能,提升整体项目的竞争力。在学习过程中,不断实践、不断优化,才能真正将这些技术运用自如。
在Windows系统上部署Lucene 8.5.1相对简单,首先需要下载最新版的lucene-8.5.1.zip文件,解压后得到包含所有Lucene库的文件夹。接下来,可以将这些库文件添加到项目的类路径中,或者通过Maven或Gradle等依赖管理工具...