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

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

什么时候用到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. 简单对比一下 C 与 Go 两种语言

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/U6jIT837x5Yxe6Ev1aMDsA 使用一个简单的计数程序将 ...

  2. Python 基础面试第四弹

    1. Python中常用的库有哪些,作用分别是什么 requests: requests 是一个用于发送 HTTP 请求的库,它提供了简单而优雅的 API,可以轻松地发送 GET.POST.PUT.D ...

  3. 如何用PHP写接口

    当用PHP编写API接口时,可以使用PHP中的框架(如Laravel.Symfony.CodeIgniter等)来简化开发过程.接下来,以使用Laravel框架为例,提供一个简单的示例代码: 首先,确 ...

  4. Api接口如何防止被刷?

    ​ 当今,越来越多的应用程序和服务都提供了API接口,使得开发人员可以方便地与这些应用程序和服务进行交互.但是,由于API接口是公开的,因此很容易被黑客利用,对系统造成损害.为了确保API接口的安全性 ...

  5. 性能调优 session 1 - 计算机体系结构 量化研究方法

    近期本人参与的存储系统项目进入到性能调优阶段,当前系统的性能指标离项目预期目标还有较大差距.本人一直奉行"理论指导下的实践",尤其在调试初期,更要抓住主要矛盾,投入最少的资源来获取 ...

  6. RocketMQ 系列(三) 集成 SpringBoot

    RocketMQ 系列(三) 集成 SpringBoot 前两篇文章介绍了 RocketMQ 基本概念与搭建,现在以它与 SpringBoot 的结合来介绍其基本的用法. RocketMQ系列(一) ...

  7. HTML网页/KRPano项目一键打包EXE工具(HTML网页打包成单个windows可执行文件exe)

    HTML一键打包EXE工具使用说明 工具简介 HTML一键打包EXE工具(HTML封装EXE,桌件)能把任意HTML项目(网址)一键打包为单个EXE文件,可以脱离浏览器和服务器,直接双击即可运行.支持 ...

  8. Solution Set -「ABC 197」

    「ABC 197A」Rotate Link. 略. #include<bits/stdc++.h> using namespace std; int main(){ char a,b,c; ...

  9. CopyOnWriteArrayList 写时复制思想

    写时复制 conpyOnWrite容器即写时复制容器.往一个容器添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] ...

  10. Istio 入门(六):版本控制

    目录 VirtualService 和 DestinationRule VirtualService 与 Service 的关系 VirtualService 和 DestinationRule 的关 ...