设为首页 收藏本站
查看: 558|回复: 0

[经验分享] 使用org.apache.lucene创建和查询索引核心代码详解

[复制链接]

尚未签到

发表于 2017-1-14 12:26:13 | 显示全部楼层 |阅读模式
  首先,我们应该在硬盘或者内存中创建我们表中需要建立索引的字段,创建的核心类使用IndexWriter
  IndexWriter(File path, Analyzer a, boolean create)
IndexWriter(String path, Analyzer a, boolean create)
构造参数:一个索引文件目录,一个分析器(一般用标准的这个),最后一个参数是标识是否清空索引目录

  a.索引格式:其实索引目录有两种格式,一种是除配置文件外,每一个Document独立成为一个文件(这种搜索起来会影响速度)。另一种是全部的Document成一个文件,这样属于复合模式就快了。
b.索引文件可放的位置:索引可以存放在两个地方1.硬盘,2.内存;

  放在硬盘上可以用FSDirectory(),放在内存的用RAMDirectory()不过一关机就没了
  使用硬盘作为索引创建目录:

  FSDirectory.getDirectory(File file, boolean create)
FSDirectory.getDirectory(String path, boolean create)两个工厂方法返回目录

  //待创建的文档目录

  FSDirectory.open(new File(INDEX_STORe_PATH));


  使用内存作为目录:
  New RAMDirectory()就直接可以再和IndexWriter(Directory d, Analyzer a, boolean create)一配合就行了如:
  创建IndexWriter对象:
  硬盘:IndexWrtier writer = new IndexWriter(FSDirectory.getDirectory(“c:\\index”,true),new StandardAnlyazer(),true);

  内存:IndexWrtier writer = new IndexWriter(new RAMDirectory(),new StandardAnlyazer(),true);
  new StandardAnalyzer(Version.LUCENE_34);//表示选择分词工具


  我们还可以给IndexWriter设置相关属性:
   writer.setUseCompoundFile(true); //设置
writer.setMaxBufferedDocs(100);  //设置缓存
writer.setMergeFactor(10);

  创建Document索引目录:
  Document doc =new Document();
  //给字段添加索引(属性名,属性名所对应的值,标志该数据源(字段)被存储,标志该数据源(字段)被索引)

  doc.add(new Field("name","工作日志",Field.Store.YES,Field.Index.TOKENIZED));

  将Document添加到IndexWriter中:
  writer.addDocument(doc);
  writer.commit();
  writer.close();

  

  查询索引:
  查询索引首先要指定位置:
  IndexSearcher indexSearcher =new IndexSearcher("c:\\indexDisk");
  创建查询解析器
  QueryParser queryParser = new QueryParser("name",newStandardAnalyzer());

  Query query = queryParser.parse("工作");

  

  执行查询返回Hits类,对查询结果进行操作:
  

  • Hits hits = indexSearcher.search(query);
  • System.out.println("找到了"+hits.length()+"结果");
  • for(int i=0;i<hits.length;i++)
  • {
  • Document doc = hits.doc(i);
  • System.out.println(doc.get("name"));
  • }  

全文检索的基本原理:http://forfuture1978.iteye.com/blog/546771
Lucene的学习总结:http://forfuture1978.iteye.com/category/89151
Lucene3.5--建索引相关知识总结:http://www.cnblogs.com/qingfeideyi/archive/2012/03/04/2379526.html

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-328379-1-1.html 上篇帖子: Apache Shiro V1.2 SecurityUtils与SecurityManager的关系以及Subject的创建 下篇帖子: 本地计算机上的 Apache Tomcat7.0 Tomcat7服务启动后停止
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表