03.什么是Lucene全文检索的原理01
全文检索的原理:查询速度快,精准度高,可以根据相关度进行排序。它的原理是:先把内容分词,分词之后建索引。
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的更多相关文章
- Lucene全文检索技术
Lucene全文检索技术 今日大纲 ● 搜索的概念.搜索引擎原理.倒排索引 ● 全文索引的概念 ● 使用Lucene对索引进行CRUD操作 ● Lucene常用API详解 ● ...
- lucene全文检索基础
全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法.比如用户在n个小说文档中检索某个关键词,那么所有包含该关键词的文档都返回给用户.那么应该从哪里入手去实现一个全文检索系统?相信大家都听说过 ...
- spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例
下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...
- lucene 全文检索工具的介绍
Lucene:全文检索工具:这是一种思想,使用的是C语言写出来的 1.Lucene就是apache下的一个全文检索工具,一堆的jar包,我们可以使用lucene做一个谷歌和百度一样的搜索引擎系统 2. ...
- Elasticsearch Lucene 数据写入原理 | ES 核心篇
前言 最近 TL 分享了下 <Elasticsearch基础整理>https://www.jianshu.com/p/e8226138485d ,蹭着这个机会.写个小文巩固下,本文主要讲 ...
- Apache Lucene(全文检索引擎)—创建索引
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...
- Nmap原理-01选项介绍
Nmap原理-01选项介绍 1.Nmap原理图 Nmap包含四项基本功能:主机发现/端口扫描/版本探测/操作系统探测.这四项功能之间存在大致的依赖关系,比如图片中的先后关系,除此之外,Nmap还提供规 ...
- 使用Lucene全文检索并使用中文版和高亮显示
使用Lucene全文检索并使用中文版和高亮显示 中文分词需要引入 中文分词发的jar 包,咱们从maven中获取 <!-- lucene中文分词器 --> <dependency&g ...
- Lucene 全文检索 Lucene的使用
Lucene 全文检索 Lucene的使用 一.简介: 参考百度百科: http://baike.baidu.com/link?url=eBcEVuUL3TbUivRvtgRnMr1s44nTE7 ...
随机推荐
- __all__ 作用, 相当于导入*
它是一个string元素组成的list变量,定义了当你使用 from <module> import * 导入某个模块的时候能导出的符号(这里代表变量,函数,类等) 参考文章: http: ...
- 织梦DedeCMS模板通用安装方法
在网络上有很多可以免费下载的DEDECMS模板,下载之后如何安装是很多新手的共同问题.下面将结合我个人使用DEDECMS模板的一些心得,讲一下DEDE模板安装的通用方法. 1.下载一个模板之后要判断一 ...
- netstat 命令 与 ss 命令
http://www.cnblogs.com/peida/archive/2013/03/11/2953420.html http://www.ttlsa.com/linux-command/ss-r ...
- leaflet简单操作demo
今天大意了解了一下leaflet这个开源的 JavaScript 库,很强大. 结合腾讯地图,做了个简单的demo,作为一个学习的起点吧(各种API结合自身的业务) <!DOCTYPE html ...
- 快速创建yii2 RESTful api的小记
1.复制backend的应用到同级目录,改名叫api 2.然后就是配置项修改,common和api目录下的 common下: bootstrap.php最后添加一行配置 api/config/main ...
- linux文本处理命令 一
1,cut 主要的用途在于将同一行里面的数据进行分解 cut -d ‘分隔符’ -f ‘第几段’ 和-f同时使用 -c 字符区间 截取字符区间 2,grep cut 是在一行讯息当 ...
- SpringMVC-Spring-Hibernate项目搭建之一-- 搭建maven 项目 & servlet的demo
一. 搭建maven项目 1. 新建maven项目,选择maven Project --> Next 2. 勾选 Create a simple project --> Next 3. ...
- Appium+python自动化25-windows版appium_desktop_V1.7.1
appium_desktop_v1.2.6 1.appium_desktop在github上最新下载地址:releases/tag/v1.2.6 2.下载后傻瓜式安装,然后启动appium,这个界面跟 ...
- DataTable 树形构造加全部
DataTable dtGx = new DataTable(); dtGx = SqlHelper.SqlGetDataTable(StrSql, "tbUserGx"); th ...
- kubernetes 学习 service相关
1: service有什么用? 直接通过Pod的IP地址和端口号可以访问容器应用,但是pod的IP地址是不可靠的,比如POD出现故障后,有可能在另外一个NOde上启动,这样Pod的IP ...