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 ...
随机推荐
- ballerina 学习三 根据swagger 以及protobuf 生成code
备注: 基本环境安装就不用介绍了,swagger 以及grpc 同时也不用介绍了,都是比较简单的代码,就是一个简单的测试 1. 初始化项目 ballerina init 项目结构如下: ├── R ...
- openresty websocket 使用
openresty websocket 使用 1. 代码如下: local server =require"resty.websocket.server" local wb, ...
- bzoj4806 炮
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4806 这种题应该想状压的. 于是发现压不下,结合每一行每一列最多放两个炮想到记一下放炮的列就 ...
- 13.Python接口自动化测试 -- 豆瓣
1.代码如下所示: import requests,unittest import json import HTMLTestRunner class TestDouBan(unittest.TestC ...
- FOR XML PATH 灵活运用
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- 函数参数个数不确定时使用va_start
今天在网上看程序时忽然发现别人的函数参数中有省略号,甚是吃惊,发现其函数中使用了va_start,经过查资料大概明白其用法,个人觉得很好用! #include <stdio.h> #inc ...
- 常见企业IT支撑【7、keepalived VRRP双主master】
我们知道,最简单的keepalive vrrp作出来的VIP实例,征用了2台服务器,生成1个VIP,也就是说,基础实配置实例中,我们的业务流量只会流向其中一台服务器,另一台就空闲了,明显示合, 能否做 ...
- UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 7: ordinal not in range(128) [duplicate]
Python在往文件里写东西的时候,如果ascii码报错 参考 http://stackoverflow.com/questions/19833440/unicodeencodeerror-ascii ...
- Brocade FC Switch 光信号强度查看
步骤: 1.先运行,porterrshow 查看口状态,然后'statsclear' and 'slotstatsclear' 2.查看:porterrshow,看下port 口的情况 3.收集sup ...
- HBase之八--(3):Hbase 布隆过滤器BloomFilter介绍
布隆过滤器( Bloom filters) 数据块索引提供了一个有效的方法,在访问一个特定的行时用来查找应该读取的HFile的数据块.但是它的效用是有限的.HFile数据块的默认大小是64KB,这个大 ...