全文检索的原理:查询速度快,精准度高,可以根据相关度进行排序。它的原理是:先把内容分词,分词之后建索引。

Lucene是apache下的一个开放源代码的全文检索引擎工具包。

提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为了软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能。

全部都建索引的话看不出效果来。先是根据英文的文档建立索引,因为它这里涉及到一个中文分析器的问题。分开两部分来看,一部分是创建索引,一部分是查询索引。

使用我们的文件流就可以读取这些原始文档,

1.获得文档

磁盘上的文件,直接使用文件流来读取。搜索引擎搜索的这些内容都在互联网上,互联网的网站非常多,每个网站的网页也非常多,内容也非常多,如何获得这些文档啊?在讲WebService的时候讲过HttpClient,HttpClient可以做爬虫程序,这个爬虫程序就是来抓取互联网的这些网页的,HttpClient可以模拟浏览器,浏览器访问一个服务器返回的是html,我根据这个html再去分析里面的a标签,就可以链到其他的网页了。如此我可以进行递归,先是访问一个网站,比如说先访问新浪网首页,新浪网首页给我返回一个html,这个html我把其中的a标签解析出来,a标签对应一个链接,把把这个链接扩散到我的队列里面,我再用httpClient再去访问我这个链接,又返回一个html。如此就可以通过一个点扩展到整个互联网。像网易或者是新浪它还有很多链接链接到其他的网站上,其他网站还有别的链接链接到其他网站上。这样我就可以通过一点来搜索整个互联网。这样就相当于挨个去爬取这些网站的网页啊。这就是爬虫程序的原理。

搜索引擎如何获得原始文档:

Solr是基于Lucene的全文检索的服务器,支持把数据从关系型数据库中导到我们的索引数据库中。

jsoup和解析XML的dom4j差不多,jsoup是解析html文档的,html只是一个文本文档而已,你还要使用jsoup去解析它。

在Lucene里面,每一个文本文档对应一个Document,你可以理解为数据库中的一条记录,我们每一个文档可以看做是数据库表中的一条记录。

2、创建文档对象。

文档不是白创建的,文档里面包含一个一个的域,这个域就是Field,学数据库也学过Field,不过数据库的Field是字段。在全文检索中Field也可以理解为一个字段。一个Document对应多个字段Field,一个文档它是一个记录。最直观的就是:一个文件的名称它是一个域了,一个文件的内容它也是一个域了,两个域了是吧。文件的大小也是一个指标,我们也把它看做是一个域。还有一个文件的路径。路径也是其中一个指标,描述了我们的文档,还有其他的你想放什么就放什么。这就是我们文档中的域。这个文档中的域,数据库中的字段不能重复,重复就会报错,表就建立不了了。在全文检索的文档中,可以有多个相同的域,它不管你,你可以重名,甚至内容相同也没有关系。

一个文档相当于数据库中的一条记录,一个文档中有多个域(Field),域类似于数据库的字段。注意:在Lucene的文档对象中可以有同名域。

03.什么是Lucene全文检索的原理01的更多相关文章

  1. Lucene全文检索技术

    Lucene全文检索技术 今日大纲 ●    搜索的概念.搜索引擎原理.倒排索引 ●    全文索引的概念 ●    使用Lucene对索引进行CRUD操作 ●    Lucene常用API详解 ●  ...

  2. lucene全文检索基础

    全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法.比如用户在n个小说文档中检索某个关键词,那么所有包含该关键词的文档都返回给用户.那么应该从哪里入手去实现一个全文检索系统?相信大家都听说过 ...

  3. spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例

    下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...

  4. lucene 全文检索工具的介绍

    Lucene:全文检索工具:这是一种思想,使用的是C语言写出来的 1.Lucene就是apache下的一个全文检索工具,一堆的jar包,我们可以使用lucene做一个谷歌和百度一样的搜索引擎系统 2. ...

  5. Elasticsearch Lucene 数据写入原理 | ES 核心篇

    前言 最近 TL 分享了下 <Elasticsearch基础整理>https://www.jianshu.com/p/e8226138485d ,蹭着这个机会.写个小文巩固下,本文主要讲 ...

  6. Apache Lucene(全文检索引擎)—创建索引

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...

  7. Nmap原理-01选项介绍

    Nmap原理-01选项介绍 1.Nmap原理图 Nmap包含四项基本功能:主机发现/端口扫描/版本探测/操作系统探测.这四项功能之间存在大致的依赖关系,比如图片中的先后关系,除此之外,Nmap还提供规 ...

  8. 使用Lucene全文检索并使用中文版和高亮显示

    使用Lucene全文检索并使用中文版和高亮显示 中文分词需要引入 中文分词发的jar 包,咱们从maven中获取 <!-- lucene中文分词器 --> <dependency&g ...

  9. Lucene 全文检索 Lucene的使用

    Lucene  全文检索  Lucene的使用 一.简介: 参考百度百科: http://baike.baidu.com/link?url=eBcEVuUL3TbUivRvtgRnMr1s44nTE7 ...

随机推荐

  1. UML中的几种关系(UML Relationships)

    依赖(Dependency) 依赖可以理解为一个类A使用到了另一个类B,而这种使用关系是具有偶然性的.临时性的.非常弱的,但是B类的变化会影响到A:比如某人要过河,需要借用一条船,此时人与船之间的关系 ...

  2. baidu手机输入法:邂逅"吹神"的声场漫游

        "十年,好久不见,兄妹,所有还好?年月如歌,你的背包.却仍然没有筛选.装满红玫瑰.人来人往,爱情搬运,纵使我成了K歌之王.也谢谢你.依然让我的全世界失眠. 孤单患者.不如不见,不要说 ...

  3. netstat 命令 与 ss 命令

    http://www.cnblogs.com/peida/archive/2013/03/11/2953420.html http://www.ttlsa.com/linux-command/ss-r ...

  4. Oracle存储过程记录异常日志

    一般我们会将一些涉及到数据库的定时任务直接用存储过程搞定,省去了后端代码的开发.部署,简单.快速,但这种方式存在一个弊端——当存储过程执行出错了,我们无法感知.解决办法也简单,学代码那样去捕获异常.打 ...

  5. new与malloc的区别,以及内存分配浅析

      从函数声明上可以看出.malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小.比如: 1 2 3 int *p; p = new int; //返回类型 ...

  6. redis+php微博功能的redis数据结构设计总结(四)

    概述: 1.完全采用redis作为数据库实现微博的登录2.发布3.微博的显示4.实现整个功能使用了redis的string,list,hashes四个数据类型,以及string类型的数值自增功能 一. ...

  7. CRITICAL:yum.cli:Config Error: Error accessing file for config file:///etc/yum.conf

    先试试yum install gcc  , 1,下载最新的yum-3.2.28.tar.gz并解压 #wget http://yum.baseurl.org/download/3.2/yum-3.2. ...

  8. idea之jrebel热部署使用教程

    JRebel是一个J2EE热部署的工具.使用它可以减少浪费8-18%的开发时间在项目的构建和部署上.虽然Java也提供了HotSpot的JVM,但是如果你修改的类中有方法名称变动的话,HotSpot就 ...

  9. error: src refspec master does not match any.

    执行下面的命令,git push 时候出错: git push origin master 出现如下错误: error: src refspec master does not match any. ...

  10. Java 成员变量和局部变量

    1.成员变量 在类中定义,用来描述对象将要有什么. 2.局部变量 在类的方法中定义,在方法中临时保存数据. 成员变量和局部变量的区别 作用域不同: 局部变量的作用域仅限于定义它的方法 成员变量的作用域 ...