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);

扫描二维码关注公众号,回复: 6788672 查看本文章

//将文档写入到索引库
indexWriter.addDocuments(docs);

//提交操作
indexWriter.commit();

//回收资源
indexWriter.close();
}
}

luncene不是搜索引擎 不是成品,只是一个工具,solr搜索框架或者es搜索框架才是成品

做SEO时,比如店铺装修时,关键词会优先被搜索引擎捕获

为什么要用全文检索?要么使用索引,但是模糊查询会导致索引失效进行全表扫描,所以使用全文检索方式 解决 关键词搜索

主键是默认带 唯一索引

尝试 500万 的记录查询 ,有索引和没有索引 的差别是80 到100倍左右

结构:索引是一种数据结构二叉树,如果五等分 每次查询减少80%的查询量
Oracle 的是Btree 索引 结构

数据查询的方法:
1.顺序扫描法,直接查询文档,从头到尾查询所有文件和整个内容
2.倒排索引法,相对顺序扫描法的一种说法,不直接查询文档,倒着来,通过查询索引 匹配文档得到结果。预先文档域 ,进行关键词的分词建立索引域,然后我们输入关键词查询时,从索引域去找到 分词的索引 匹配 对应的文档内容,获取最终结果

全文检索技术的应用场景:
单机软件的搜索,如Word 里的搜索
站内搜索
垂直领域的搜索
专业引擎公司

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

猜你喜欢

转载自www.cnblogs.com/xiaoniandexigua/p/11162794.html
今日推荐