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的原 ...
随机推荐
- 一文读懂LockSupport
阅读本文前,需要储备的知识点如下,点击链接直接跳转. java线程详解 Java不能操作内存?Unsafe了解一下 LockSupport介绍 搞java开发的基本都知道J.U.C并发包(即java. ...
- 使用MD5算法和sha512sum校验和检验文件完整性
目录 一.前言 二.MD5算法简介 三.什么是校验和 四.使用MD5算法和sha512sum校验和检验文件完整性 五.总结 一.前言 在我们日常生活中,无论是下载文件.传输数据还是备份重要信息,如何确 ...
- 解放双手!ChatGPT助力编写JAVA框架
亲爱的Javaer们,在平时编码的过程中,你是否曾想过编写一个Java框架去为开发提效?但是要么编写框架时感觉无从下手,不知道从哪开始.要么有思路了后对某个功能实现的技术细节不了解,空有想法而无法实现 ...
- Programming abstractions in C阅读笔记:p130-p131
<Programming Abstractions In C>学习第52天,p130-p131,总结如下: 一.技术总结 1. pig latin game 通过pig latin gam ...
- Jmeter关联之正则表达式提取器
正则表达式简介 摘自网上的说法,正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种 逻辑公式,就是用事先定义好的一些特定字符 ...
- vue2实现饼图Pie组件封装
实现如下效果: 效果展示:https://code.juejin.cn/pen/7226656439941955644 如果不会请移步到官网的栗子,请点击查看 直接给大家上代码: 整体代码片段 1 & ...
- 秋招还没Offer怎么办?
如果你是双非院线.没有实习经历.没有出众的技术(算法没刷一千道,也没做过 Spring Cloud 项目).现在还没有面试(或只有少量的面试).并且目前还没有 Offer,那么恭喜你,你和目前大部分同 ...
- ORACLE错误代码一览表,方便大家查询!
ORACLE错误一览表,方便大家查询! ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最 ...
- SharedPreferences-PreferenceUtils
SharedPreferences easy use import android.content.Context; import android.content.SharedPreference ...
- 2020/4/29 一场令人头疼的cf。。。
今天是被安排的cf...我真的是太菜了啊...又双叒叕被机房的一群dalao吊打了... 这就是我与6年级的dalao的区别吗...我裂开了 T1:A - Exercising Walk 简单题. 就 ...