`
wangdei
  • 浏览: 372191 次
社区版块
存档分类
最新评论

简单的运用Lucene进行检索

    博客分类:
  • JAVA
阅读更多

 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!");
        }

}

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]

分享到:
评论

相关推荐

    基于lucene的全文检索系统

    它提供了一个简单但功能强大的API,可以帮助开发者快速地在大量文档中实现高效的全文检索功能。在这个基于Struts2的全文检索系统中,Lucene扮演了核心的角色,负责文本的索引和查询。 **Struts2框架** Struts2是一...

    基于Lucene的检索会议期刊代码JSP展示

    **基于Lucene的检索会议期刊代码JSP展示** 在信息技术领域,搜索引擎的构建是一项关键任务,而Apache Lucene是...通过深入研究这些代码,开发者可以掌握如何在实际项目中运用Lucene进行全文检索,并利用JSP呈现结果。

    基于Lucene的全文检索系统

    它提供了一个简单的API,使得开发者可以轻松地在Java应用程序中集成全文检索功能。在这个基于Lucene的全文检索系统中,我们可以实现对本地文件的高效搜索,方便用户快速找到所需的文档。 **1. Lucene的基本概念** ...

    基于Lucene的全文检索框架

    **基于Lucene的全文检索框架** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。它提供了一个可扩展的、高效的文本搜索解决方案,适用于各种应用场景,包括网站搜索、文档检索、数据挖掘等。这个...

    LuceneUtils_lucenejava_全文检索_lucene_

    通过理解并熟练运用其创建索引和搜索的核心步骤,我们可以构建出高效、准确的信息检索系统,无论是简单的文档搜索还是复杂的商业应用,Lucene都能胜任。在实际项目中,结合`LuceneUtils.java`这样的工具类,可以简化...

    lucene5 源码教程

    总结,Lucene 5为开发者提供了强大且灵活的全文检索功能,通过深入学习其源码,尤其是拼音检索和分词器的运用,可以有效地提升搜索质量和用户体验。不断探索和实践,才能充分挖掘Lucene的潜力,为各种信息检索应用...

    Lucene的正则表达式检索

    本篇文章将深入探讨如何在Lucene中利用正则表达式进行检索。 正则表达式是一种模式匹配语言,它允许我们用简洁的语法来描述一系列字符串。在Lucene中,我们可以使用Analyzer的TokenStream来处理正则表达式查询,...

    lucene入门小例子

    Lucene是中国大百科全书式的全文检索库,它在...这些都是深入理解和运用Lucene时需要关注的点。 总之,Lucene是一个强大且灵活的全文检索工具,通过这个入门小例子,你可以逐步揭开其神秘的面纱,踏入文本搜索的世界。

    lucene-7.4.0jar包

    通过深入理解并熟练运用Lucene 7.4.0,开发者可以构建出高性能、灵活且功能强大的全文搜索引擎,满足各种复杂的信息检索需求。这个压缩包提供的完整组件将帮助开发者快速上手并实现自己的搜索解决方案。

    基于lucene 的简单搜索引擎.rar

    总的来说,“基于lucene 的简单搜索引擎.rar”提供的示例可能涵盖以上提到的基本流程,帮助初学者理解如何在实际项目中运用Lucene构建一个简单的搜索引擎。通过学习和实践,你可以逐步掌握Lucene的精髓,为更复杂的...

    lucene搜索引擎项目

    通过深入研究这个项目,开发者可以了解Lucene的工作原理,掌握搜索引擎的构建技巧,并且能够灵活运用到实际的项目中,提高数据检索的效率和用户体验。无论你是Java开发者还是对全文搜索感兴趣的IT人士,这个项目都是...

    lucene.net源代码

    《深入剖析Lucene.NET:基于源代码的实例解析》 Lucene.NET,作为Apache Lucene的.NET版本,是一个高性能、全文...掌握这些基础知识,将有助于我们在实际项目中灵活运用Lucene.NET,实现高效、准确的全文检索服务。

    lucene实战第二版(最新)

    本书《Lucene实战第二版》是一本关于如何使用Lucene进行文本检索的实用教程。这本书详细介绍了Lucene的使用方法和内部工作机制,并提供了丰富的代码示例和清晰的解释。它不仅适合那些计划在应用中使用Lucene的开发者...

    Lucene简单Demo(附带Jar)

    Lucene是Apache软件基金会的一个开放源代码项目,它是一个高性能、全文本检索库,提供了Java实现的全文索引和搜索功能。Lucene不仅能够对文本进行索引,还可以对文档进行存储,使得搜索结果可以返回原始文档。它的...

    lucene实例lucene实例

    《Lucene实战:深入解析与应用》 Lucene,作为Apache软件基金会的开源全文检索库,是Java领域中广泛使用的搜索引擎框架。...在不断实践中,你将能熟练运用Lucene,为你的应用程序增添强大的搜索能力。

    lucene实现全文搜索

    以下是一个简单的Lucene索引创建示例: ```java Directory indexDir = FSDirectory.open(new File(INDEXDIR)); IndexWriter writer = new IndexWriter(indexDir, analyzer, true, MaxFieldLength.LIMITED); File ...

    lucene2.0与其分词工具包

    作为一款开源项目,Lucene为开发者提供了丰富的API,使得构建搜索引擎变得简单而高效。然而,随着时间的推移,Lucene已经发展到更高的版本,如现在的Lucene 8.x,但在一些特定的场景或对老版本有依赖的项目中,...

    Lucene+compass学习资料

    总的来说,掌握Lucene、Compass和Ajax的综合运用,将使开发者能够在Web应用中构建出强大且用户友好的搜索功能,提升整体项目的竞争力。在学习过程中,不断实践、不断优化,才能真正将这些技术运用自如。

    最新版windows lucene-8.5.1.zip

    在Windows系统上部署Lucene 8.5.1相对简单,首先需要下载最新版的lucene-8.5.1.zip文件,解压后得到包含所有Lucene库的文件夹。接下来,可以将这些库文件添加到项目的类路径中,或者通过Maven或Gradle等依赖管理工具...

Global site tag (gtag.js) - Google Analytics