美文网首页Hadoop
01.lucene 全文检索介绍

01.lucene 全文检索介绍

作者: 哈哈大圣 | 来源:发表于2019-02-28 23:25 被阅读28次

lucene 全文检索介绍

一、数据的分类

1). 结构化数据

  1. 格式固定、长度固定、数据类型固定。
  2. 例如 数据库中的数据

2). 非结构化数据

  1. 格式不固定、长度不固定、数据类型不固定等等
  2. 例如word文档、pdf文档、邮件、html、txt、xml等

二、数据的查询

1). 结构化数据的查询

  1. SQL语句,查询结构化数据的方法:简单、快速

2). 非结构化数据的查询

  1. 顺序扫描:将数据加载到内存,匹配字符串等等
  2. 全文检索】: 将非结构化数据变成结构化数据
    • 索引:为了提高查询速度创建的某个数据结构的集合,通常喜欢使用 B Tree 。

先根据空格进行字符串拆分,得到一个单词列表,基于单词列表创建一个索引。然后查询索引,根据单词和文档的对应关系找打文档列表。

三、全文检索

先创建索引然后根据查询索引的过程叫做全文检索;索引一次创建可以多次使用。表现为每次查询速度很快。

1). 全文检索应用场景

  1. 搜索引擎
    • 百度、谷歌
  2. 站内搜索
    • 论坛搜索、微博、文章搜索
  3. 电商搜索
    • 淘宝搜索、京东搜索
  4. 只要有搜索的地方就可以使用全文检索技术

四、Lucene全文检索的流程

Lucene是一个基于Java开发的全文检索工具包,Java领域的搜索引擎王者,其他很多的工具包的底层都是封装的Lucene


lucene索引和搜索流程图.png

1). 创建索引

1]. 获得文档

  1. 原始文档:要基于那些数据来进行搜索,这些数据就是原始文档
    • 搜索引擎的原始文档:比如 百度 谷歌,使用 爬虫技术 爬取的原始文档
    • 站内搜索:数据库中的数据
    • 个人pc:直接使用io流读取磁盘上的我呢间

2]. 创建文档对象

  1. 每个原始文档都会有一个 Document 对象
  2. 每个Document独享中包含多个域(Field)
    • 每个文档都有一个唯一的编号。
  3. 域中保存就是原始文档数据,包含:
    • 域的名称
    • 域中的值

lucene文档Document中的域Fiele.png

3]. 分析文档:分词的过程 (以英文内容为列)

  1. 根据空格进行字符串拆分,得到一个单词列表
  2. 将单词统一转换成小写
  3. 去除标点符号
  4. 去除停用词:没有实际意义的一些词 比如 a/an/the
  5. 每个关键词都封装到一个独立的Term对象中
    • Term类对象中包含两部分内容
      1. 关键词所在的域
      2. 关键词本身
    • 不同域中拆分出来的相同的关键词是不同的Term

4]. 创建索引

基于关键词列表创建一个索引。保存到索引库中。

  1. 索引库中中保存的东西
    1. 索引:一般为排序的B Tree结构,
    2. document对象
    3. 关键词和文档的对应关系:与关键词相关的文档的id以链表的形式串联起来。

通过词语找文档,这些与词语对应的文档的id以链表的形式串联起来;这种索引结构为 倒排索引结构


lucene索引库.png
倒排索引结构.jpg

2). 查询索引

1]. 用户查询接口

  1. 用户数据查询条件的地方:例如淘宝的搜索框

2]. 将关键字封装成一个查询对象

  1. 指明需要查询的域
  2. 要搜索的关键词

3]. 执行查询

  1. 根据要查询的关键词到对应的域上进行搜索
  2. 找到关键词,根据关键词找到对应的文档

4]. 渲染结果

  1. 根据文档的id找到文档对象
  2. 对关键词进行高亮显示
  3. 分页处理
  4. 最终渲染给用户!

相关文章

  • 01.lucene 全文检索介绍

    lucene 全文检索介绍 一、数据的分类 1). 结构化数据 格式固定、长度固定、数据类型固定。 例如 数据库中...

  • Elasticsearch Query DSL之全文检索(Ful

    本节将详细介绍DSL全文搜索。全文查询包括如下几种模式: match query标准的全文检索模式,包含模糊匹配、...

  • Coreseek安装与测试

    1.Coreseek介绍: Sphinx默认不支持中文索引及检索,基于Sphinx开发了Coreseek全文检索服...

  • ElasticSearch-搜索查询

    URL querystring语法 全文检索: 单字段全文检索: 条件组合 单字段精确检索: 多个检索条件的组合:...

  • PostgreSQL全文检索简介

    PostgreSQL自带有一个简易的全文检索引擎,可以实现小规模数据量的全文检索功能。本文我们将引导介绍一下这个功...

  • ElasticSearch全文检索引擎-介绍

    全文检索 一种将文件种或者数据库中所有文本与检索项匹配的文字资料检索方法。对全文数据的检索 数据分类: 结构化数据...

  • 全文检索

    概念 从文本或者数据库中,不限定资料字段,自由地萃取出讯息的技术 执行全文检索任务的程式,一般称作搜索引擎, 将使...

  • 全文检索

    概述 Full-Text Search 是将存储于数据库中的整本书或整篇文章中的任意内容信息查找出来的技术。 倒排...

  • django中的全文检索

    全文检索 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理 haystack...

  • Django 2.1.7 全文检索

    全文检索 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理。 haystac...

网友评论

    本文标题:01.lucene 全文检索介绍

    本文链接:https://www.haomeiwen.com/subject/pcgluqtx.html