"没写完, 后面 (高级) 有趣部分没写只把大致的方向写了下 截图图太长, 复制代码格式会乱, 影响阅读. 索性不写以后抽时补上. 第一次在 这个大家庭发帖 希望有人喜欢我分享的干货, 如果对哪里不理解, 或者有质疑都可以在下方留言, 大家共同探讨, 加深印象! 长期更新 分享 Java,Hadoop,Spack,Msy .."

搜索引擎之 Lucene 初步认识 (操作)

😂 😂 😂 没写完, 后面 (高级) 有趣部分没写只把大致的方向写了下 截图图太长, 复制代码格式会乱, 影响阅读. 索性不写以后抽时补上.
🎉 第一次在 这个大家庭发帖 希望有人喜欢我分享的干货, 如果对哪里不理解, 或者有质疑都可以在下方留言, 大家共同探讨, 加深印象!
长期更新 分享 Java,Hadoop,Spack,Msyql,Linux 这方面的干货, 也希望能找到志同道合的朋友!
并不是不分享代码 <----- > 而是直接上代码 展示效果非常差 (所以直接看图吧)!

谢谢 ~~~

1. 搜索引擎

1.1 什么是搜索引擎

通过爬虫爬取到互联网的信息后, 进行组织与处理, 为用户提供搜索服务, 将检索的相关信息展示给用户!

1.2 搜索引擎基本的运行原理

搜索系统基本运行原理png.png

1.3 原始数据库查询的缺陷

1.4 倒排索引技术

倒排索引, 又称为反向索引: 将存储的值进行切分, 存入索引库, 每一个关键字都会对应着一个记录项, 记录项中记录了这个关键字出现在哪些文档中, 以及在此文档的什么位置上
倒排索引.png

为什么说倒排索引可以提升查询的效率和精准度呢?

​ 倒排索引, 是将数据提前按照格式分词放好, 建立索引, 当用户进行搜索, 将用户的关键字进行分词, 然后根据分词后的单词到索引库中寻找对应词条, 根据词条, 查到对应所在的文档位置, 将其文档内容直接获取即可

2.Lucene

2.2 使用 Lucene 如何构建索引

2.2.1 第一步: 导入相关的 jar 包 (pom 依赖)

长图就不一张一张的截了 直接看 Maven 依赖
image.png

2.2.2 第二步: 书写写入索引的代码写入索引.jpg

image.png

2.3 索引查看工具索引查看工具01.png索引查看工具02.png索引查看工具03.png

2.4 API 详解

​ 在 Lucene 中, 每一条数据以文档的形式进行存储, 文档中也有其对应的属性和值, Lucene 中一个文档类似数据库的一个表, 表中的字段类似于文档中的字段, 只不过这个文档只能保存一条数据

​ Document 看做是一个文件, 文件的属性就是文档的属性, 文件对应属性的值就是文档的属性的值 content

image.png

名称解释:

​ 分析: 是否将字段的值进行分词

​ 索引: 指的是能否被搜索

​ 是否保存: 指的的初始值是否需要保存

​ 如果一个字段中的值可以被分词, 那么必然是支持搜索的

一般采用 IK 分词器

http://code.google.com/p/ik-analyzer/

2.5 集成 IK 分词器

ik概述.png

ik.png
基本使用:

Code:IndexWriterConfig config = new IndexWriterConfig(Version.LATEST,new IKAnalyzer());

2.6 查询索引

2.6.1 查询入门:

@Test    public void indexSearch() throws Exception { 
       //1. 创建查询的核心对象        
FSDirectory d = FSDirectory.open(new File("H:\\test"));        
IndexReader reader = DirectoryReader.open(d);        
IndexSearcher indexSearcher = new IndexSearcher(reader);        
//2. 执行查询        
QueryParser queryParser = new QueryParser("content", new IKAnalyzer());        
Query query = queryParser.parse("碉堡了");        
TopDocs topDocs = indexSearcher.search(query, 10);        
//3. 获取文档id       
 ScoreDoc[] scoreDocs = topDocs.scoreDocs; 
//获取得分文档集合        
for (ScoreDoc scoreDoc : scoreDocs) {            
int id = scoreDoc.doc; //获取文档id     
float score = scoreDoc.score;// 返回此文档的得分           
Document doc = indexSearcher.doc(id);            
String docId = doc.get("id");            
String content = doc.get("content");            
System.out.println(docId+"   "+content+"  "+"得分为:"+score);        
		}    
	}
}

2.7 查询相关 API 详解

2.8 多样化查询 (特殊查询)

提取一个查询的方法, 传递不同的 query, 即可

//提取一个查询的方法
public void query(Query query) throws Exception{
    //1. 创建 查询的核心对象
    IndexReader reader = DirectoryReader.open(FSDirectory.open(new File("H:\\test")));
    IndexSearcher indexSearcher = new IndexSearcher(reader);
    //3. 执行查询
    TopDocs topDocs = indexSearcher.search(query, 10);
    ScoreDoc[] scoreDocs = topDocs.scoreDocs;//获取得分文档的集合
    for (ScoreDoc scoreDoc : scoreDocs) {
        //获取文档id
        int docId = scoreDoc.doc;
        //获取文档得分
        float score = scoreDoc.score;
        //根据id获取文档
        Document doc = indexSearcher.doc(docId);
        String content = doc.get("content");
        String title = doc.get("title");
        System.out.println("文档得分为"+score+content+"  "+title);
}}

2.8.1 词条查询: TermQuery

image.png

2.8.2 通配符查询: WildcardQuery

image.png

2.8.3 模糊查询: FuzzyQuery

image.png

2.8.4 数值范围查询: NumericRangeQuery

image.png

2.8.5 组合查询: BooleanQuery

image.png

2.8 Lucene 的索引修改

image.png

2.9 Lucene 的索引删除

image.png

3. Lucene 的有趣部分 ()

3.1 Lucene 的高亮显示

3.1.1 Lucene 的高亮

3.2 Lucene 的排序

3.3 Lucene 的分页

3.4 Lucene 的加权因子(激励因子)

打赏 20 积分后可见  
20 积分 • 1 打赏
展开
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2214 引用 • 7525 回帖 • 966 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    560 引用 • 1187 回帖 • 873 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    146 引用 • 302 回帖 • 718 关注
  • Lucene
    9 引用 • 21 回帖
2 操作
NewPx 在 2019-05-15 23:35:51 更新了该帖
NewPx 在 2019-05-15 23:48:26 更新了该帖
4 回帖   
请输入回帖内容...
  • NewPx 1 评论        

    哈哈 , 幸会幸会! 如果写的不好, 还请及时指正 ~!😳 我对这方面只是简单的了解

    Lucene 了解的不多,我主要用 Solr
    Volong 1 赞同
  • 其他回帖
  • Volong

    好巧,我也是做搜索相关开发的 😄

    1 回复
  • Ahian  

    巧了我也做搜索

    1 回复
  • NewPx        

    幸会幸会