2019独角兽企业重金招聘Python工程师标准>>>

简介:

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎

发展:

Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下载。在2001年9月做为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中。随着每个版本的发布,这个项目得到

Lucene 图片

明显的增强,也吸引了更多的用户和开发人员。2004年7月,Lucen

Lucene分析图

e1.4版正式发布,10月的1.4.2版本做了一次bug修正。表1.1显示了Lucene的发布历史。

  版本 发布日期 里程碑

  0.01 2000年3月 第一个开源版本(SourceForge)

  1.0 2000年10月

  1.01b 2001年7月 最后的SourceForge版本

  1.2 2002年6月 第一个Apache Jakarta版本

  1.3 2003年12月 复合索引格式,查询分析器增加,远程搜索,token定位,可扩展的API

  1.4 2004年7月 Sorting, span queries, term vectors

  1.4.1 2004年8月 排序性能的bug修正

  1.4.2 2004年10月 IndexSearcher optimization and misc. fixes

  1.4.3 2004年冬 Misc. fixes2.4.1 2009年3月8日发布新版本

  2.3.0 2008年1月 更新为2.3.0

  2.4.0 2008年10月 更新为2.4.0

  2.4.1 2009年 5月 更新为 2.4.1

  2.9.0 2009年9月25号 更新为2.9.0

  2.9.1 2009年11月6号 更新为2.9.1

  3.0.0 2009年11月25号 更新为3.0.0

  3.0.1 2010年2月26号 更新为3.0.1

  3.0.2 2010年6月18号 更新为3.0.2

  3.0.3 2010年12月3号 更新为3.0.3

提点优势:

作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere[10]中也采用了Lucene。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。

  Lucene是一个高性能、可伸缩的信息搜索(IR)库。它使你可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的成熟的、免费的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于在Apache软件许可 [ASF, License]。同样,Lucene是当前与近几年内非常流行的免费的Java信息搜索(IR)库。

突出的优点

  Lucene作为一个全文检索引擎,其具有如下突出的优点:

  (1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。

  (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。

  (3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。

  (4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。

  (5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。

  面对已经存在的商业全文检索引擎,Lucene也具有相当的优势。

  首先,它的开发源代码发行方式(遵守Apache Software License[12]),在此基础上程序员不仅仅可以充分的利用Lucene所提供的强大功能,而且可以深入细致的学习到全文检索引擎制作技术和面相对象编程的实践,进而在此基础上根据应用的实际情况编写出更好的更适合当前应用的全文检索引擎。在这一点上,商业软件的灵活性远远不及Lucene。

  其次,Lucene秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具扩充能力的面向对象架构,程序员可以在Lucene的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到HTML、PDF[13]等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于Lucene恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。

  最后,转移到apache软件基金会后,借助于apache软件基金会的网络平台,程序员可以方便的和开发者、其它程序员交流,促成资源的共享,甚至直接获得已经编写完备的扩充功能。最后,虽然Lucene使用Java语言写成,但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现(例如.net framework[14]),在遵守Lucene索引文件格式的基础上,使得Lucene能够运行在各种各样的平台上,系统管理员可以根据当前的平台适合的语言来合理的选择。

  如何用java实现lucene(只使用,不求甚解版-_-")

前提

  lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util

建立索引

  IndexWriter writer = new IndexWriter("E:/index", new StandardAnalyze(),true,MaxFieldLength.UNLIMITED); //true代表覆盖原先数据,maxFieldLength用来限制Field的大小

  Document doc = new Document();

  doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.ANALYZED,

  Field.TermVector.WITH_POSITIONS_OFFSETS));

  doc.add(new Field("time", "60", Field.Store.YES, Field.Index.ANALYZED,

  Field.TermVector.WITH_POSITIONS_OFFSETS));

  writer.addDocument(doc);

  writer.optimize(); //优化

  writer.close();

搜索

  IndexSearcher searcher= new IndexSearcher("E:/index") Query query = new TermQuery(new Term("title", "lucene"));//单个字节查询

  //Query query = new FuzzyQuery(new Term("title", "lucena"));//模糊查询

  //Query query = new WildcardQuery(new Term("title", "lu*"));// 通配符查询 ?代表一个字符,*代表0到多个字符

  //BooleanQuery query = new BooleanQuery();//条件查询

  //BooleanQuery qson1 = new BooleanQuery();

  //Query q1 = new TermQuery(new Term("title", "lucene"));

  //qson1.add(q1, Occur.MUST);//MUST是必须满足的

  //BooleanQuery qson2 = new BooleanQuery();

  //Query q2= new TermQuery(new Term("sex", "woman"));

  //qson2 .add(qson1, Occur.MUST_NOT);//MUST_NOT是必须不满足

  //query.add(qson1, Occur.SHOULD);

  //query.add(qson2, Occur.SHOULD);//SHOULD代表满足qson1或者满足qson2都可以

  //PhraseQuery query = new PhraseQuery();//近距离查询

  //query.setSlop(5);//距离设置为5

  //query.add(new Term("title", "lucene"));

  //query.add(new Term("title", "introduction"));//查询出title中lucene和introduction距离不超过5个字符的结果

  //Query query = new PrefixQuery(new Term("title", "lu"));//WildcardQuery的lu*一样

  //RangeQuery query = new RangeQuery(new Term("time", "50"),new Term("time", "60"), true);

  //true代表[50,60],false代表(50,60)

  Hits hits = searcher.search(query);

  for (int i = 0; i < hits.length(); i++) {

  Document d = hits.doc(i);

  String title= d.get("title");

  System.out.print(title+ " ");

  }

  这样,基本上就可以使用了

  注:以上代码为lucene早些版本的写法。lucene3.02的写法有所改变。

转载于:https://my.oschina.net/u/3647620/blog/1552332

web 信息模糊检索等 Lucene的实现相关推荐

  1. 计算机高级搜索文章内容,外文信息计算机检索

    <外文信息计算机检索>由会员分享,可在线阅读,更多相关<外文信息计算机检索(88页珍藏版)>请在人人文库网上搜索. 1.外文信息计算机检索,本章内容 一.四大检索系统概况及其高 ...

  2. 百度地图WEB服务-地点检索API

    百度地图WEB服务-地点检索API 行政区划区域检索 圆形区域检索 矩形区域检索 地点检索服务(又名Place API)是百度地图开放平台提供的Web API接口服务: 该服务提供多种场景的地点(PO ...

  3. Web信息收集之搜索引擎——Google Hacking

    信息收集概述 Web信息收集(探测)即web踩点,主要是掌握目标web服务的方方面面,是实现web渗透入侵前的准备工作 Web踩点内容包括操作系统.服务器类型.数据库类型.Web容器.Web语言.域名 ...

  4. 华东理工《文献检索》MOOC (2)---精通web of science检索

    华东理工<文献检索>MOOC 第二章 精通检索工具 2.2 精通web of science检索 文章目录 前言 二.精通web of science检索 2.1 认识WOS平台 2.2 ...

  5. (转自Timon's wang blogs)C#实现web信息自动抓取

    原文转自:http://www.csharp.net.cn/post/C实现web信息自动抓取.html 主要为了学习一下相关的网络蜘蛛,为自己获取信息使用 背景   随着Internet的普及,网络 ...

  6. 基于DOM的Web信息提取方法

    摘  要 文章提出一种基于DOM的Web信息提取方法,通过归纳学习获得被提取信息的定位路径,利用XPath和XSLT在数据定位和数据转换方面的特点编写提取模式,根据网页元素与DOM节点对应关系,判断所 ...

  7. php模糊搜索慢怎么办,MySQL中文模糊检索问题的解决方法_php

    mysql中文模糊检索问题的解决方法 来源:林兴陆 在 MySQL 下,在进行中文模糊检索时,经常会返回一些与之不相关的 记录,如查找 "-0x1.ebea4bfbffaacp-4%&quo ...

  8. 解决MySQL数据库中文模糊检索问题

    在 MySQL下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找 "%a%" 时,返 回的可能有中文字符,却没有a字符存在.本人以前也曾遇到过类似问题,经详细阅读My ...

  9. 集合练习。学生信息包括学号、姓名、出生日期、性别。把N个学生的信息放入一个集合中。可以根据学号,对学生信息进行检索。并可以根据生日进行排序输出。

    集合练习.学生信息包括学号.姓名.出生日期.性别.把N个学生的信息放入一个集合中.可以根据学号,对学生信息进行检索.并可以根据生日进行排序输出. Student.java package Collec ...

最新文章

  1. python——装饰器
  2. 一段java并发编程代码
  3. 在未来给我们看病的将是医疗机器人?
  4. YbtOJ#20237-[冲刺NOIP2020模拟赛Day10]区间均值【树状数组】
  5. Java8 Striped64 和 LongAdder
  6. OTL翻译(9) --常量的SQL语句
  7. python-迭代器和生成器
  8. 大自然里,隐藏着最美妙的数学
  9. 谈谈你对oracle,对Oracle的优化
  10. iRingg for Mac(iPhone铃声制作工具)
  11. linux下ftp命令删除文件夹命令,Linux中FTP账号无法删除文件夹的解决方案
  12. Redis 数据丢失问题排查
  13. css眨眼效果,CSS3 精巧的笑脸/眨眼变形动画
  14. android 点击返回键home键,appium怎么按下系统按键?如按下返回键、home键等等
  15. iPad mini7:库克终于舍得堆料了?
  16. ..\Src\INA226.c(142): error: #20: identifier “GPIO_IDR_IDR9“ is undefined
  17. SVN、CVS、VSS区别
  18. 抖音死亡计算机在线测,抖音死亡计算器怎么玩?抖音死亡计算器测试入口
  19. 三星宣布调查Galaxy S9向随机联系人发送照片事件
  20. java 面向对象编程之二

热门文章

  1. poj3190 区间贪心 挑战程序设计竞赛
  2. xshell连接kali时vim无法粘贴解决方法
  3. 我的博客园css样式
  4. 查看linux中tcp连接数
  5. 教你如何制作饼干icon教程
  6. 【CODEVS2577】医院设置
  7. HDFS分布式文件系统设计思想
  8. 奥运吉祥物动画宣传片
  9. 搞定ReentrantReadWriteLock 几道小小数学题就够了
  10. 新来的大神用策略模式把if else给优化了,技术总监说:能不能想好了再改?...