当前位置:首页 > 教程 > Lucene全方检索框架入门篇

Lucene全方检索框架入门篇

今天给大家介绍的是关于分布式存储的一个工具,Lucene,在Java里面是非常常见的一个框架,在Csharp中,也有移植版的Lucene.Net,都这么火了,快来认识认识吧。

加密

1、什么时Lucene?
是一个全文搜索框架,而不是应用产品,他只是一种工具让你能实现某些产品,并不像www.baidu.com拿来就能用
是apache组织的一个用java实现的全文搜索引擎的开源项目

2、Luncen的工作方式?
提供的服务实际包含两部分:一入一出
入:写入,即将你提供的数据源写入索引
出:读出,向用户提供全文搜索服务,让用户可以通过关键词定位源

3、写入流程
数据源首先经过analyzer处理,包括:分词,分成一个个单词
将数据源中需要的信息加入Document的各个Field中,并把需要索引的字段按照分词的顺序索引起来,把需要存储的Field存储起来。
将索引写入存储器,存储器可以是内存或磁盘

4、读出流程

用户提供搜索关键词,经过analyzer处理。

对处理后的关键词搜索索引找出对应的Document。
用户根据需要从找到的Document中提取需要的Field。

5、Lucene专业术语
Lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索
来看一些在lucene中使用的术语,这里并不打算作详细的介绍,只是点一下而已—-因为这一个世界有一种好东西,叫搜索。
IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。
Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。
Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。
Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。
Field:字段。
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;
Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。
QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。
Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。

微软

6、Lucene注意事项
索引不能太大,要不然效率会很低,大于1G的时候必须考虑公布索引问题
不建议用多线程来建索引,产生的互锁问题很麻烦,经常发现索引被lock,无法重新建议的情况
中文分词是个大问题,目前免费的分词效果都很差。如果有能力还是自己实现一个分词模块,用最短路径的切分方法,网上有教材和demo源码,可以参考。
建增量索引的时候很耗cpu,在访问量大的时候会导致cpu的idle为0
默认的评分机制不太合理,需要根据自己的业务定制

整体来说lucene要用好不容易,必须在上述方面扩充他的功能,才能作为一个商用的搜索引擎。

国外优秀的ElasticSearch使用案例

GitHub
GitHub使用ElasticSearch搜索20TB的数据,包括13亿的文件和1300亿行代码
GitHub在2013年1月升级了他们的代码搜索,由solr转为ElasticSearch,目前集群规模为26个索引存储节点+8个客户端节点(负责处理搜索请求)

Mozilla
Mozilla公司以火狐著名,它目前使用WarOnOrange这个项目来进行单元或功能测试,测试结果以json方式索引到ElasticSearch中,开发人员可以非常方便的查找Bug

Sony
Sony公司使用ElasticSearch作为信息搜索引擎

  • << 微软跨平台之.NET Core
  • 自己动手写一个MyORM >>
  • 作者:
    除非注明,本文原创:知道91,欢迎转载!转载请以链接形式注明本文地址,谢谢。
    原文链接:http://www.zhidao91.com/lucene-study/

    相关文章 近期热评 最新文章

    • HTML+CSS+JS 实现图标旋转效果
      本文讲解了使用HTML+CSS+JS 实现图标旋转效果。
    • js怎样获取和设置元素的属性
      本文讲解了js获取和设置元素的属性的方法,有需要的朋友可以看看
    • Node.Js 不一般的JavaScript
      互联网的火热使得JavaScript风光无限,且服务端的JavaScript也并不是什么新技术了,相关的框架也有不少,只是node.js的成功让他爆发式的出现在我们的视线中,让很多前端...
    • 前端程序员必须知道的优化小知识
      前端开发人员的一些小知识,Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多网站无情忽视的技术。除了后台需要在性能上做优化外,其实前端的页面...
    • HTML5与CSS3的完美搭配
      TML5将会取代1999年制定的HTML 4.01、XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到符合当代的网络需求,为桌面和移动平台带来无缝衔接的丰富内容。
    • 前端程序员必须知道的chrome开发者技巧
      在Web开发者中,Google Chrome是使用最广泛的浏览器。六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备的工具。你可能已经熟悉了它的部分功能...
    • 怎样在WordPress中安装Google Analytics
      就算你积累了多年网站建设的经验,你都不可能一开始就建一个外观,速度,功能以及转化都很完美的网站。你能做的并且也是各个站长正在做的,无非是通过不断的监测来改进...
    • 怎样在WordPress中安装Google Analytics
      就算你积累了多年网站建设的经验,你都不可能一开始就建一个外观,速度,功能以及转化都很完美的网站。你能做的并且也是各个站长正在做的,无非是通过不断的监测来改进...
    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • ABP开发指南系列教程(2) – 多层架构...
      为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将工程分为四个层: 展现层(...
    • ABP开发指南系列教程(1) – 入...
      ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WE...
    • Windows下 JIRA + Agile + Mysql 破解...
      本文讲述了Windows下 JIRA + Agile + Mysql 破解安装示例教程