全文索引的原理:
是 扫描每个词 对每个词创建索引,指明这个词在文章出现的次数和位置

全文检索的流程:
对 检索的对象(文章,文档,网页内容) 预先建立 文档域 和 索引域 ,在索引域会分词创建索引,
然后 搜索关键词 会从 索引域 查询 对应的索引 ,
根据索引匹配 出文档 域的 内容,获取最后结果。

什么时候用到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和索引的更多相关文章

  1. lucene写索引出现锁文件的原因之一

    lucene正常情况目录下的文件 有三个文件. segments.gen segments_a08, 还有一个类似 _uw.cfs名字的东西. 当然,不一定都一样, 但肯定是这三个. 如果出现了很多文 ...

  2. Lucene -- 实时索引

    lucene的实时搜索可以分成:实时和近实时的搜索. 实时只能依靠内存了. 近实时可以用lucene中提供org.apache.lucene.index.DirectoryReader.open(In ...

  3. lucene学习笔记:三,Lucene的索引文件格式

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  4. lucene创建索引简单示例

    利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...

  5. 如何提高Lucene构建索引的速度

    如何提高Lucene构建索引的速度 hans(汉斯) 2013-01-27 10:12 对于Lucene>=2.3:IndexWriter可以自行根据内存使用来释放缓存.调用writer.set ...

  6. Solr4.8.0源码分析(12)之Lucene的索引文件(5)

    Solr4.8.0源码分析(12)之Lucene的索引文件(5) 1. 存储域数据文件(.fdt和.fdx) Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的.为了提升压缩比,S ...

  7. Solr4.8.0源码分析(11)之Lucene的索引文件(4)

    Solr4.8.0源码分析(11)之Lucene的索引文件(4) 1. .dvd和.dvm文件 .dvm是存放了DocValue域的元数据,比如DocValue偏移量. .dvd则存放了DocValu ...

  8. Solr4.8.0源码分析(10)之Lucene的索引文件(3)

    Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这 ...

  9. Solr4.8.0源码分析(9)之Lucene的索引文件(2)

    Solr4.8.0源码分析(9)之Lucene的索引文件(2) 一. Segments_N文件 一个索引对应一个目录,索引文件都存放在目录里面.Solr的索引文件存放在Solr/Home下的core/ ...

  10. Solr4.8.0源码分析(8)之Lucene的索引文件(1)

    Solr4.8.0源码分析(8)之Lucene的索引文件(1) 题记:最近有幸看到觉先大神的Lucene的博客,感觉自己之前学习的以及工作的太为肤浅,所以决定先跟随觉先大神的博客学习下Lucene的原 ...

随机推荐

  1. 论文解读(MCADA)《Multicomponent Adversarial Domain Adaptation: A General Framework》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Multicomponent Adversarial Domain Adaptation: A Gener ...

  2. 《深入理解Java虚拟机》读书笔记:方法调用

      方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍.最频繁的操作,但前面已经讲过 ...

  3. 分布式测试插件 pytest-xdist 使用详解

    使用背景: 大型测试套件:当你的测试套件非常庞大,包含了大量的测试用例时,pytest-xdist可以通过并行执行来加速整体的测试过程.它利用多个进程或计算机的计算资源,可以显著减少测试执行的时间. ...

  4. 重要变更 | Hugging Face Hub 的 Git 操作不再支持使用密码验证

    在 Hugging Face,我们一直致力于提升服务安全性,因此,我们将对通过 Git 与 Hugging Face Hub 交互时的认证方式进行更改.从 2023 年 10 月 1 日 开始,我们将 ...

  5. Windows安装、配置、卸载MySQL教程

    MySQL是一个关系型数据库管理系统,目前为Oracle旗下产品,它具有开源.体积小.速度快的优点,许多网站使用的都是MySQL数据库. 简单而言,MySQL数据库核心功能就是用来存储数据的. MyS ...

  6. 深入理解HTTP的基础知识:请求-响应过程解析

    首先,我们从网络协议的最顶层开始讲解,即应用层.在网络通信中,应用层是最接近用户的一层,它负责为特定的网络应用提供服务和功能.应用层协议定义了数据交换的规则和格式,以便不同的应用程序能够相互通信和交换 ...

  7. daffodil

    import java.util.ArrayList; public class Daffodil { /** * 打印出100-999之间所有的"水仙花数",所谓"水仙 ...

  8. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-20-处理鼠标拖拽-下篇

    1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,其次有人私信宏哥说是有那种类 ...

  9. 【RocketMQ】RocketMQ 5.0新特性(三)- Controller模式

    在RocketMQ 5.0以前,有两种集群部署模式,分别为主从模式(Master-Slave模式)和Dledger模式. 主从模式 主从模式中分为Master和Slave两个角色,集群中可以有多个Ma ...

  10. Frog 3 题解

    Frog 3 题目大意 题意都这么明确了还要这个干什么. 存在 \(n\) 个点,每个点有一个属性 \(h_i\),\(h_i\) 单增,从点 \(i\) 移动到点 \(j(j>i)\) 的代价 ...