Lucene和索引
全文索引的原理:
是 扫描每个词 对每个词创建索引,指明这个词在文章出现的次数和位置
全文检索的流程:
对 检索的对象(文章,文档,网页内容) 预先建立 文档域 和 索引域 ,在索引域会分词创建索引,
然后 搜索关键词 会从 索引域 查询 对应的索引 ,
根据索引匹配 出文档 域的 内容,获取最后结果。
什么时候用到ik分词器?
1. 关键词搜索时 对关键词 进行分词 ,
2. 对文档域 和 索引域 时 对 索引 分词
luncene自带中文分词器:
StandardAnalyzer,CJKAnalyzer ,SmartChineseAnalyzer,自带的不是很符合中国人的分析习惯,而且扩展性不是很好
第三方的中文分词器:paoding --比较好,可惜过时不能用了,mmseg4j --版本跟新太快,企业不喜欢用,IK-analyzer 我们用的比较多
ik分词器的安装:我么创建的是maven工程,使用maven命令进行安装。步骤:将jar包 考到某盘 如 D盘 根目录,使用 如下方式安装:
mvn install:install-file -Dfile=你的jar包路径\IKAnalyzer5.3.1.jar -DgroupId=org.wltea.ik-analyzer -DartifactId=ik-analyzer -Dversion=5.3.1.RELEASE -Dpackaging=jar
mvn install:install-file -Dfile=你的jar包路径\IK-Analyzer-extra-5.3.1.jar -DgroupId=org.wltea.ik-analyzer -DartifactId=ik-analyzer-extra -Dversion=5.3.1.RELEASE -Dpackaging=jar
使用步骤:
1.pom 文件依赖
2.导入配置文件 :分别将ext.dic,IKAnalyzer.cfg.xml,stopword.dic文件拷贝到工程的resources目录
3. 在代码编写中 ,使用 ik分词器
直接: Analyzer analyzer = new IKAnalyzer();
创建索引
创建索引分为如下8个步骤:
采集数据 从数据库查询数据
2.创建Document文档对象 每一条记录对应一个文档
3.创建分析器(分词器) 用来提取词汇
4.创建IndexWriterConfig配置信息类 索引库配置信息
5.创建Directory对象,声明索引库存储位置
6.创建IndexWriter写入对象 写入的是文档对象即数据库中查询到的数据
7.把Document写入到索引库中
8.释放资源
示例代码:
public class CreateIndex {
//创建BookDao实现类的实例,用户采集数据
private BookDao bookDao = new BookDaoImpl();
@Test
public void testCreateIndex() throws Exception {
//数据采集
List<Book> books = bookDao.queryBookList();
List<Document> docs = new ArrayList<Document>();
for (Book book : books) {
//创建文档对象
Document doc = new Document();
doc.add(new TextField("id",book.getId()+"", Field.Store.YES));
doc.add(new TextField("name",book.getName(), Field.Store.YES));
doc.add(new TextField("price",book.getPic()+"", Field.Store.YES));
doc.add(new TextField("pic",book.getPic(), Field.Store.YES));
doc.add(new TextField("desc",book.getDesc(), Field.Store.YES));
docs.add(doc);
}
//创建分词器
Analyzer analyzer = new StandardAnalyzer();
//索引存储位置
Directory directory = FSDirectory.open((new File("D:/index")).toPath());
//IndexWriterConfig配置了IndexWriter对象的参数信息
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
//创建IndexWriter写入对象 Directory d, IndexWriterConfig conf
IndexWriter indexWriter = new IndexWriter(directory,indexWriterConfig);
//将文档写入到索引库
indexWriter.addDocuments(docs);
//提交操作
indexWriter.commit();
//回收资源
indexWriter.close();
}
}
luncene不是搜索引擎 不是成品,只是一个工具,solr搜索框架或者es搜索框架才是成品
做SEO时,比如店铺装修时,关键词会优先被搜索引擎捕获
为什么要用全文检索?要么使用索引,但是模糊查询会导致索引失效进行全表扫描,所以使用全文检索方式 解决 关键词搜索
主键是默认带 唯一索引
尝试 500万 的记录查询 ,有索引和没有索引 的差别是80 到100倍左右
结构:索引是一种数据结构二叉树,如果五等分 每次查询减少80%的查询量
Oracle 的是Btree 索引 结构
数据查询的方法:
1.顺序扫描法,直接查询文档,从头到尾查询所有文件和整个内容
2.倒排索引法,相对顺序扫描法的一种说法,不直接查询文档,倒着来,通过查询索引 匹配文档得到结果。预先文档域 ,进行关键词的分词建立索引域,然后我们输入关键词查询时,从索引域去找到 分词的索引 匹配 对应的文档内容,获取最终结果
全文检索技术的应用场景:
单机软件的搜索,如Word 里的搜索
站内搜索
垂直领域的搜索
专业引擎公司
全文索引工作原理: 扫描每个词 对每个词创建索引,指明这个词在 文章出现的次数和位置
Lucene和索引的更多相关文章
- lucene写索引出现锁文件的原因之一
lucene正常情况目录下的文件 有三个文件. segments.gen segments_a08, 还有一个类似 _uw.cfs名字的东西. 当然,不一定都一样, 但肯定是这三个. 如果出现了很多文 ...
- Lucene -- 实时索引
lucene的实时搜索可以分成:实时和近实时的搜索. 实时只能依靠内存了. 近实时可以用lucene中提供org.apache.lucene.index.DirectoryReader.open(In ...
- lucene学习笔记:三,Lucene的索引文件格式
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- lucene创建索引简单示例
利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...
- 如何提高Lucene构建索引的速度
如何提高Lucene构建索引的速度 hans(汉斯) 2013-01-27 10:12 对于Lucene>=2.3:IndexWriter可以自行根据内存使用来释放缓存.调用writer.set ...
- Solr4.8.0源码分析(12)之Lucene的索引文件(5)
Solr4.8.0源码分析(12)之Lucene的索引文件(5) 1. 存储域数据文件(.fdt和.fdx) Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的.为了提升压缩比,S ...
- Solr4.8.0源码分析(11)之Lucene的索引文件(4)
Solr4.8.0源码分析(11)之Lucene的索引文件(4) 1. .dvd和.dvm文件 .dvm是存放了DocValue域的元数据,比如DocValue偏移量. .dvd则存放了DocValu ...
- Solr4.8.0源码分析(10)之Lucene的索引文件(3)
Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这 ...
- Solr4.8.0源码分析(9)之Lucene的索引文件(2)
Solr4.8.0源码分析(9)之Lucene的索引文件(2) 一. Segments_N文件 一个索引对应一个目录,索引文件都存放在目录里面.Solr的索引文件存放在Solr/Home下的core/ ...
- Solr4.8.0源码分析(8)之Lucene的索引文件(1)
Solr4.8.0源码分析(8)之Lucene的索引文件(1) 题记:最近有幸看到觉先大神的Lucene的博客,感觉自己之前学习的以及工作的太为肤浅,所以决定先跟随觉先大神的博客学习下Lucene的原 ...
随机推荐
- 浏览器Xbox 云游戏教程
我这里使用的是韩国的地方因为延迟和网速会比较快 Xbox 云游戏韩国网站 Xbox.com에서 Xbox Cloud Gaming(베타) 首先插件商店下载一个油猴插件 在系统语言和时区改为韩国 在 ...
- 使用C#创建安装Windows服务程序(最全教程)
开发语言:C# 开发环境: Visual Studio 2022 微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/windows-s ...
- docker-compose快速部署elasticsearch-8.x集群+kibana
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 前文<Docker下elasticse ...
- GitHub Actions CI/CD 工作流实战
1. 什么是 GitHub Actions 与 workflow ? GitHub Actions 是 GitHub 提供的一种持续集成(CI)和持续部署(CD)的工具,用于自动化软件开发过程中的各种 ...
- 手写raft(三) 实现日志压缩
手写raft(三) 实现日志压缩 在上一篇博客中MyRaft实现了日志复制功能,按照计划接下来需要实现日志压缩. 手写raft(一) 实现leader选举 手写raft(二) 实现日志复制 1. 什么 ...
- QA|20221001|SecureCRT自动断开怎么办?
Q:SecureCRT自动断开怎么办? A:如下设置
- MindSpore简要性能分析
技术背景 在之前的一篇博客中,我们介绍过MindInsight的安装与使用.不过在前面的文章中,我们主要介绍的是MindInsight与SummaryCollector的配合使用,更多的是用于对结果进 ...
- java类序列化和反序列化
参考:https://zhuanlan.zhihu.com/p/144535172?utm_id=0 https://blog.csdn.net/qq_42617455/article/details ...
- xgo多线程
import threading import time #导入xgoedu from xgoedu import XGOEDU from xgolib import XGO #导入xgolib # ...
- 临时表、视图与系统函数_Lab2
MySQL数据库操作 Lab1.md body { font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSys ...