搜索引擎学习(一)初识Lucene
一、Lucene相关基础概念
定义:一个简易的工具包,实现文件搜索的功能,支持中文,关键字,多条件查询,凡是文件名或文件内容包含的都查出来。
数据分类:结构化数据(固定格式或有限长度的数据)和非结构化数据(不定长或无固定格式的数据)
PS:lucene是搜索引擎的底层实现,solr实际上是对lucene进行封装了的框架。
二、数据搜索
【1】结构化数据
由于数据有一定的规范和结构,通常使用sql语句来查询。
【2】非结构化查询
(1)顺序扫描法:一个文档一个文档的找,效率低,相当慢。
(2)全文检索:将非结构化数据中的一部分提取出来重新组织成为索引,这种先建索引,再对索引进行搜索的过程就叫做全文检索。(例:字典)
PS:虽然创建索引的过程非常耗时,但是索引一旦创建就可以多次使用,全文检索主要处理的就是查询,所以耗时间创建索引是非常值得的!
三、搜索流程
索引:1、使用流读取文档内容 2、构建文档内容的具体对象(bean) 3、对文档内容做分词 4、创建索引
索引库:里面既存放了索引,也存放了具体的文档。(可看做类似字典的结构:有目录,也有具体的内容)
用户查询接口:即关键词输入框,并不是指java实现类的对应接口。
创建索引
1.获得原始文档
原始文档:指的是要索引和搜索的内容,表现形式包括网站的网页,数据库的数据和磁盘上的文件等...
2.创建文档对象
lucene文档对象:包含了许许多多的域(field),每个文档有一个唯一编号,即文档id。
- 每个文档可以有多个域
- 不同文档可以有不同的域
- 同个文档可以有相同的域(域名和域值都相同)
3.分析文档
分词:将原文档提取单词进行分词,去除标点符号,去除停用词,将大写的文字全部转换为小写进行分词,最终生成语汇单元(一个一个的单词)。
term:分词后每个单词称为一个term,不同域中拆出来的相同单词是不同的term!
term的结构:类似于K-V的结构:term 域的名称(K) 域的值(V)
4.创建索引
索引结构:倒排索引结构(反向索引结构),包括索引和文档两部分。
搜索引擎学习(一)初识Lucene的更多相关文章
- 初识lucene(想看代码的跳过)
最早是在百度贴吧里看到的lucene这个名称,只知道跟搜索引擎有关,因为工作中一直以来没有类似的需求,所以没有花时间学习这方面的知识. 刚过完年,公司不忙,自己闲不住把<Netty权威指南> ...
- SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏
SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!! 基础知识目前不够,有感性 ...
- DotNetty网络通信框架学习之初识Netty
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- 学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、查询索引、导流、word2vec
影视剧字幕聊天语料库特点,把影视剧说话内容一句一句以回车换行罗列三千多万条中国话,相邻第二句很可能是第一句最好回答.一个问句有很多种回答,可以根据相关程度以及历史聊天记录所有回答排序,找到最优,是一个 ...
- 搜索引擎学习(五)Lucene操作索引
一.代码分析 /** * Lucene入门 * 操作索引 */ public class ManageIndex { public IndexWriter getIndexWriter() throw ...
- 搜索引擎学习(三)Lucene查询索引
一.查询理论 创建查询:构建一个包含了文档域和语汇单元的文档查询对象.(例:fileName:lucene) 查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档i ...
- 搜索引擎学习(二)Lucene创建索引
PS:需要用到的jar包: 代码实现 1.工程结构 2.设置工程依赖的jar包 3.代码实现 /** * Lucene入门 * 创建索引 */ public class CreateIndex { / ...
- 1. 初识 Lucene
在学习Lucene之前呢,我们当然首先要了解下什么是Lucene. 0x01 什么是Lucene ? Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供. Lu ...
- (转)初识 Lucene
Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能.Lucene 目前是 Apache Jakarta 家族中的一个开源项目. ...
随机推荐
- java程序CPU 100%调试
前置 PID为进程id,NID为线程ID 步骤一.找到最耗CPU的进程 top 然后键入P,按CPU占用率排序(M是按内存排序) 步骤二.找到进程中最耗CPU的线程 top -Hp PID 步骤三.将 ...
- 计算机网络-传输层(1)UDP协议
UDP协议基于Internet IP协议,只提供两个基础功能: 分用/复用 分用:主机接收到IP数据报(datagram),每个数据报携带源IP地址.目的IP地址且携带一个传输层的段(Segment) ...
- 喵的Unity游戏开发之路 - 在球体上行走
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- 04.简单了解一下Redis企业级数据备份方案
一.企业级的持久化的配置策略 (1)每隔1分钟去检查如果超过10000个可以变更,则生成一个快照.RDB最多丢1分钟的数据. save 60 10000 (2)AOF一定要打开,fsync,every ...
- vagrant安装的坑
关于VAGRANT安装过程的坑 标签: 虚拟化 闲来无聊 试试vagrant虚拟化技术 安装过程中坑太多了 所以记录下方便以后 注意: 执行 vagrant up 命令报错 如下 PS F ...
- idea vue文件设置tab为四个空格
1.找到vue项目中有个叫.editorconfig的文件,打开可以发现有以下配置项: 2.ctrl+alt+i看看效果(单文件) 3.IDEA中对整个项目进行代码格式化 在项目的左侧树结构中,右 ...
- Python的UI库
https://github.com/realitix/vulkan https://github.com/swistakm/pyimgui https://wxpython.org
- 游戏UI系统设计
1.需要实现的功能 UI界面的管理(窗体加载.窗体显示.窗体隐藏.窗体销毁等) UI分层次(比如弹窗.广播信息需要在上层) UI界面的出场.入场动画 UI界面的显示效果(比如带透明背景.带高斯模糊背景 ...
- HDU - 6570 - Wave(暴力)
Avin is studying series. A series is called "wave" if the following conditions are satisfi ...
- termux 进阶
直接正题. 1.优化键位: mkdir $HOME/.termux echo "extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], ...