Lucene全文检索之倒排索引实现原理、API解析【2018.11】

官网 http://lucene.apache.org/
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/java/7.5.0/

Lucene的全文检索是指什么:

程序扫描文档,对文档document建立索引,并对文档进行分词 ik,对每一个词建立索引并关联文档document的编号(索引);
当用户进行搜索时候,按照搜索条件的分词的索引,匹配出对应的文档索引,把具体的文档展现出来,整个过程就是全文索引(倒排索引基本原理);
->
->全文检索的特点
1、只处理文本不处理语义
2、搜索时英文不区分大小写
3、结果列表有关度 排行

12.19更新

倒排索引原理是什么?

1、倒排索引,实现原理创建document文档对象,并对其添加索引1
2、搜索条件进行分词,对词条创建索引2
3、映射索引1索引2的关系,搜索依据索引2来查找索引1,然后找到对应的document对象;
以上的这样的一个过程,称之为倒排索引技术;

1、document建立索引
1
2、依据分词建立倒排索引列表、
在这里插入图片描述

1、全文检索和数据库模糊查询(或者模糊匹配)的区别:

1、数据库模糊匹配会查询出许多和期望无关的数据;
=>假设搜索it相关的:
=>select * from db where name like ‘%’ it ‘%’ 会搜索出git ,显然结果并不是我们所期望的;
2、相关度排序问题数据库无法解决;
3、数据库模糊匹配效率较低;

2、Lucene与Solr的关系

/
->Lucene: 是全文检索的底层API;
->Solr: 基于Lucene开发的搜索服务器;


3、使用Lucene需要的依赖:
    <dependencies>
        <!-- Junit单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- lucene核心库 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>4.10.2</version>
        </dependency>
        <!-- Lucene的查询解析器 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>4.10.2</version>
        </dependency>
        <!-- lucene的默认分词器库 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>4.10.2</version>
        </dependency>
        <!-- lucene的高亮显示 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-highlighter</artifactId>
            <version>4.10.2</version>
        </dependency>
        <!--ik分词器 -->
        <dependency>
            <groupId>com.janeluo</groupId>
            <artifactId>ikanalyzer</artifactId>
            <version>2012_u6</version>
        </dependency>
    </dependencies>

》>1、创建测试类完成一次分词:

1、创建文档,添加 StringField、TextField
2、对文档分词:使用 IKAnalyzer 分词器

  • FSDirectory创建目录
  • DirectoryReader 读取Directory
  • 搜索工具IndexSearcher

3、创建写的工具:

  • 配置IndexWriterConfig写的配置,设置规则
  • 生成写的对象IndexWriter

4、提交关闭

  • commit
  • close

以下测试源码分享地址:
https://github.com/medoo-Ai/lucene

/**
 * @auther SyntacticSugar
 * @data 2018/11/23 0023上午 11:37
 */
public class CreateIndexTest {
   
    /**
     * 给 文档添加fieldName /FieldText/store 是yes or no 控制是否保存
     */
    @Test
    public void createIndexTest() {
   
        Document document = new Document();
        // LongField 为数字范围查找做铺垫
       document.add(new LongField("id", 1L, Field.Store.YES));
        document.add(new TextField("title", "谷歌地图之父跳槽facebook厉害了我的哥碉堡了" +
                "蓝瘦香菇", Field.Store.YES));
        // 创建储存目录、分词
        try {
   
            FSDirectory indexDir = FSDirectory.ope
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值