在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Lucene搜索引擎 → Java Lucene 搜索入门实例源码下载

Java Lucene 搜索入门实例源码下载

Lucene搜索引擎

下载此实例
  • 开发语言:Java
  • 实例大小:1.34M
  • 下载次数:20
  • 浏览次数:239
  • 发布时间:2015-12-07
  • 实例类别:Lucene搜索引擎
  • 发 布 人:crazycode
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Lucene 实例 搜索

实例介绍

【实例简介】

lucene执行的两个主要步骤如下

1、建立索引的执行过程 
     在建立索引时,先要把文档存到索引库中,还要更新词汇表。
操作步骤如下:
(1)、把数据对象转换成相应的Document,其中的属性转为Field;
(2)、调用工具IndexWriter的addDocument(doc),把Document添加到索引库中;
(3)、Lucene做的操作:
       把文档存到索引库中,并自动指定一个内部编号,用来唯一标识这个条数据;内部编号类似与这条数据的地址,在索引库内部的数据进行调整后,这个编号就可能会改变,同时词汇表中的引用的编号也会做相应的改变,以保 证正确。
      更新词汇表。把文本中的词找出来放到词汇表中,简历与文档的对应关系。要把那些词放到词汇表中呢?这就用到一个叫Analyzer(分词器)的工具。他的作用是把一段文本中的词按照规则取出所包含的所有词。对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由其子类实现。
 
在把对象的属性转化为 Field时,相关代码为:
   doc.add(new Field(“title”,article.getTitle(), Store.YES, Index.Analyzed))
其中第三个参数的意思为
Store.NO 不存储属性的值;
Store.YES 存储属性的值
 
第四个参数
Index.NO 不建立索引
Index.ANALYZED 分词后建立索引
Index.NOT_ANALYZED 不分词,把整个内容作为一个词建立索引
 
Store是影响搜索出的结构是否有指定属性的原始内容。
Index是影响是否可以从这个属性中查询,或者是查询时可以查其中的某些词,还是要把整个内容作为一个词进行查询。
 
2、从索引库中搜索的执行过程(QueryParse、TopDocs、ScoreDoc)
在进行搜索时,先在词汇表中查找,得到符合条件的文档编号列表。再根据文档编号真正的取数据(Document)
操作步骤如下:
(1)、把要查询字符串转为Query对象。这就像在Hiberante总是用HQL查询时,也要先调用Session.createQuery(hql)转成Hibernate的Query对象一样。把查询字符串转换成Query是使用QueryParser,或者使用MultiFieldQueryParser。查询字符串也要先经过Analyzer(分词器)。要求检索时使用Analyzer要与监理索引使用的Analzyer要一致,否则可能搜索不出正确的结果。
(2)、调用IndexSearcher.search(),进行查询,得到结果。此方法返回未TopDocs,是包含结果的多个信息的一个对象。其中有totalHits代表记录数,ScoreDoc的数组。ScoreDoc是代表一个结果的相关度得分与文档编号等信息的对象。
(3)、取出要用到的数据列表。调用IndexSearcher.doc(scoreDoc.doc)以取出指定编号对应的Document数据,在分页时要用到:一次只取一页的数据。

【实例截图】


【核心代码】


public class IndexWriterDemo {  
    /** 
     * 将即将检索的资源写入索引库 
     * @param writer 
     * @throws Exception 
     */  
    public void buildDocs(IndexWriter writer)throws Exception {  
        writer.deleteAll();//清空索引库里已存在的文档(document)  
        List<User> list = DataUtil.getUsers();//得到数据资源  
        System.out.println("buildDocs()->总人数为 :" list.size());  
        for(User user :list){  
            Document doc = new Document();//创建索引库的文档  
            doc.add(new Field("id",String.valueOf(user.getId()),Store.YES,Index.NO));  
            doc.add(new Field("name",user.getName(),Store.YES,Index.ANALYZED));  
            doc.add(new Field("age",String.valueOf(user.getAge()),Store.YES,Index.ANALYZED));  
            doc.add(new Field("sex",user.getSex(),Store.YES,Index.ANALYZED));  
            doc.add(new Field("birthday",String.valueOf(user.getBirthday()),Store.YES,Index.ANALYZED));  
            writer.addDocument(doc);//将文档写入索引库  
        }  
        int count =writer.numDocs();  
        writer.forceMerge(100);//合并索引库文件  
        writer.close();  
        System.out.println("buildDocs()->存入索引库的数量:" count);  
    }  
  
    /** 
     * 从索引库中搜索你要查询的数据 
     * @param searcher 
     * @throws IOException 
     */  
    public void searcherDocs(IndexSearcher searcher) throws IOException{  
        Term term =new Term("sex", "man");//查询条件,意思是我要查找性别为“man”的人  
        TermQuery query =new TermQuery(term);  
        TopDocs docs =searcher.search(query, 100);//查找  
        System.out.println("searcherDoc()->男生人数:" docs.totalHits);  
        for(ScoreDoc doc:docs.scoreDocs){//获取查找的文档的属性数据  
            int docID=doc.doc;  
            Document document =searcher.doc(docID);  
            String str="ID:" document.get("id") ",姓名:" document.get("name") ",性别:" document.get("sex");  
            System.out.println("人员信息:" str);  
        }  
    }  
  }  


标签: Lucene 实例 搜索

实例下载地址

Java Lucene 搜索入门实例源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

相关文章

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警