Lucene是一个全文搜索框架,而不是应用产品。因此它并不像http://www.baidu.com/ 或者google Desktop那样拿来就能用,它只是提供了一种工具让你能实现这些产品。实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键词出现在哪里。

传统的关系型数据库搜索速度慢,性能差,其原因在于在查询数据时例如模糊查询“%like%”需要进行锁表操作,一行一行进行扫描,如果存在则返回结果。而Lucene利用了倒排索引、压缩算法和二元搜索 ,它会提前把你需要的结果准备好,等你查询时直接返回给你。那么它是如何知道你要搜索的是什么内容呢?它会对所有数据进行分析,找出可以搜索的关键词,并把与之相关的结果记录下来。

什么是倒排索引:根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(invertedindex)

lucene的工作方式 。lucene提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源

写入流程 :源字符串首先经过analyzer处理,包括:分词,分成一个个单词;去除stopword(可选)。 将源中需要的信息加入Document的各个Field中,并把需要索引的Field索引起来,把需要存储的Field存储起来。 将索引写入存储器,存储器可以是内存或磁盘。

读出流程 :用户提供搜索关键词,经过analyzer处理。 对处理后的关键词搜索索引找出对应的Document。用户根据需要从找到的Document中提取需要的Field。

document:用户提供的源是一条条记录,它们可以是文本文件、字符串或者数据库表的一条记录等等。一条记录经过索引之后,就是以一个Document的形式存储在索引文件中的。用户进行搜索,也是以Document列表的形式返回。

field :一个Document可以包含多个信息域,例如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域就是通过Field在Document中存储的。 Field有两个属性可选:存储和索引。通过存储属性你可以控制是否对这个Field进行存储;通过索引属性你可以控制是否对该Field进行索引。这看起来似乎有些废话,事实上对这两个属性的正确组合很重要。

Lucene和Solr的关系:它们就像是jdbc和hibernate的关系,Lucence是原生的搜索框架,Solr是封装的Lucene。Lucene长于进行英文的分词搜索,要进行中文分词可以使用Sphinx配合XunSearch

Lucene和Solr原理初探相关推荐

  1. 什么是Lucene和Solr和Elasticsearch,它们的区别是什么?

    说道es我们往往会听到Solr和Lucene,那么Lucene和Solr和Elasticsearch的区别? Lucene Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具 ...

  2. 阿里P8架构师谈:开源搜索引擎Lucene、Solr、Sphinx等优劣势比较

    开源搜索引擎分类 1.Lucene系搜索引擎,java开发,包括: Lucene Solr Elasticsearch Katta.Compass等都是基于Lucene封装. 你可以想象Lucene系 ...

  3. 53.大数据之旅——java分布式项目14-信息检索技术之Lucene,Solr

    信息检索技术 概念介绍 全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法.全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统. 全文检索主要对非结构化数据的数据检索. ...

  4. 面试题:Lucene、Solr、ElasticSearch

    1.Lucene和Solr和Elasticsearch的区别 Lucene Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文 ...

  5. Solr原理?为什么要用Solr?Solr为什么比较快?

    什么是Solr? Solr是一个用java开发的基于lucene引擎的 全文搜索 平台,原理是倒排索引,从关键字到文档的过程,Solr的资源都是以Doc为对象进行存储的,每个文档都由一系列的field ...

  6. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

  7. C#之CLR内存原理初探

    C#之CLR内存原理初探 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-08-04 我要评论 这篇文章主要介绍了C#之CLR内存原理初探,有助于读者进一步理解C#的运 ...

  8. ElasticSearch,Sphinx,Lucene,Solr,Xapian。哪种适合哪种用途? [关闭]

    我目前正在寻找其他搜索方法,而不是拥有一个巨大的SQL查询. 我最近看到了弹性搜索并玩弄了嗖 (搜索引擎的Python实现). 你能说出你的选择理由吗? #1楼 我的sphinx.conf sourc ...

  9. SpringBoot运行原理初探

    运行原理初探 其中它主要是依赖一个父项目,主要是管理项目的资源过滤及插件! <parent><groupId>org.springframework.boot</grou ...

  10. Lucene和Solr版本对应关系

    2019独角兽企业重金招聘Python工程师标准>>> Lucene和Solr版本对应关系 转载于:https://my.oschina.net/u/1757446/blog/270 ...

最新文章

  1. linux 雷电接口,Intel完全开放雷电技术:底层融合USB 4
  2. 服务器mysql在哪里_mysql的服务器在哪里
  3. java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...
  4. python无法识别vim中文代码
  5. 关于SQL Server数据库中的标识列
  6. Java常用设计模式————组合模式
  7. 洛谷——P1548 [NOIP1997 普及组] 棋盘问题
  8. python生成器详解
  9. P6647 [CCC 2019] Tourism
  10. 常见linux软件下载地址
  11. 屏幕录像专家 共享版 V7.5 安装图解
  12. 工业相机和普通相机的区别详解_工业相机与普通相机的差别
  13. Ubuntu 20.04 Server 使用命令行设置 IP 地址
  14. Mac 破解百度云盘限速下载问题
  15. ToolStrip工具条
  16. flex osgi实现-potomac 实现页面与页面间数据传递和页面间各部分的数据传递
  17. unity3d坑收集
  18. 一个显示器分屏显示两个画面_测了两个爆款游戏显示器,结果我发现他们都有坑。...
  19. JSJ——java基本概念一
  20. 下载安装 gSoap

热门文章

  1. 高中计算机教学设计案例分析,高一年级信息技术教学设计(案例)
  2. 高数 吉米多维奇 785
  3. NSIS例子-TSE3.6.2脚本
  4. 如何在64位win10中装个win98虚拟机
  5. 网页三剑客的一些序列号
  6. Hadoop 核心概念解析
  7. UNITY游戏开发源码
  8. Iphone 5s 8.0.2越狱
  9. JQuery高效制作网页特效第六章jQuery选择器课后作业
  10. 分享股票量化交易程序化模型的设计思路