基于Lucene的全文检索实践
由于项目的需要,使用到了全文检索技术,这里将前段时间所做的工作进行一个实践总结,方便以后查阅。在实际的工作中,需要灵活的使用lucene里面的查询技术,以达到满足业务要求与搜索性能提升的目的。
一、全文检索介绍
1.1为什么需要全文检索
数据可以分为结构化数据和非结构化数据,对数据查询时,结构化数据可以通过SQL语句等方式查询,而非结构化数据(如txt,word等)无法用此方式查询。
我们利用将非结构化数据转化为非结构化数据(即先将文件中单词按空格拆分,把单词创建一个索引,然后查询索引,根据单词和文档的关系找到文档列表,即全文检索),进行快速查询。
1.2什么是全文检索
先创建索引,然后查询索引的过程是全文检索
具有一次创建,多次使用的特点(创建的速度有点慢)。
二、全文检索流程
1. 绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括:确定原始内容即要搜索的内容→采集文档→创建文档→分析文档→索引文档。
2. 红色表示搜索过程,从索引库中搜索内容,搜索过程包括:用户通过搜索界面→创建查询→执行搜索,从索引库搜索→渲染搜索结果。
三、全文检索索引
3.1倒排索引
倒排索引即为全文检索的核心的部分,所谓倒排索引,简单地就是,根据单词,返回它在哪个文件中出现过,而且频率是多少的结果。这就像百度里的搜索,你输入一个关键字,那么百度引擎就迅速的在它的服务器里找到有该关键字的文件,并根据频率和其他的一些策略(如页面点击投票率)等来给你返回结果。这个过程中,倒排索引就起到很关键的作用。
3.2创建索引
你可以利用你的技术从数据库、互联网、爬虫、word等方式获取原始数据,即采集信息
3.3构建索引文档
对应每个原始文档创建一个Document对象(拥有唯一的ID)
每个Document中包含多个Field
不同的Document可以有不同的Field
同一个Document可以有相同的Field
域中以键值对的形式保存域的名称和值
四、全文检索使用
1、所需核心库
lucene-core |
lucene核心库 |
lucene-queryparser |
lucene查询解析器 |
lucene-analyzers-common |
lucene默认分词器 |
lucene-analyzers-smartcn |
lucene提供的中文分词器 |
ik-analyzer |
开源中文分词器 |
2、lucene查询
查询方式 |
意义 |
TermQuery | 精确查询 |
TermRangeQuery | 查询一个范围 |
PrefixQuery | 前缀匹配查询 |
WildcardQuery | 通配符查询 |
BooleanQuery | 多条件查询 |
PhraseQuery | 短语查询 |
FuzzyQuery | 模糊查询 |
Queryparser | 万能查询(上面的都可以用这个来查询到 |
相关文章
- 使用 Deep Graph Library 训练知识图谱嵌入
- 使用 GuardDuty 配合 Amazon Elasticsearch Service 实时监控安全态势
- AWS Glue DataBrew 正式发布 – 助您快速实现数据清洗与规范化的可视数据准备工具
- AWS 发布 AWS Glue DataBrew,让数据可视化准备工作提速达80%
- Java Scanner 类
- 使用 TensorBoard 实现 TensorFlow 训练作业可视化
- java Scanner类
- JAVA System类
- 使用 A/B 测试衡量 Amazon Personalize 推荐结果的有效性
- 新增功能 – 在 Amazon S3 中将 Amazon DynamoDB 表数据导出到您的湖内数仓,无需编写代码
- Java-Object类
- 使用 Amazon Kinesis 快速构建流式数据分析架构
- Python2.7安装mysql-Python,碰到的问题
- 宣布推出 AWS Glue DataBrew – 一种可帮助您更快地清理和标准化数据的可视化数据准备工具
- 在 Amazon SageMaker Autopilot 推理管道中部署您的自有数据处理代码
- Java----------String类
- Java String 类
- 运用上下文信息提升 Amazon Personalize 推荐结果的相关性
- 批量椒盐噪声 python_linear 、rigde、lasso(python实现)
- Java charAt() 方法