全文搜索引擎和lucene

全文搜索简介

全文检索首先将要查询的目标文档中的词提取出来,组成索引,通过查询索引达到搜索目标文档的目的。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。

搜索引擎和站内搜索的区别

搜索引擎搜索的内容是全互联网各种类型的数据。

站内搜索搜索的内容只是本站内的信息,比如电商网站,搜索的功能,只会搜索本网站的商品信息。

全文检索详解

全文检索是一种将文件中所有文本与检索项匹配的检索方法。它可以根据需要获得全文中有关章、节、段、句、词等信息。
计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,
当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。 

经过几年的发展,全文检索从最初的字符串匹配程序已经演进到能对超大文本、语音、图像、活动影像等
非结构化数据进行综合管理的大型软件。本教程只讨论文本检索。

主要应用领域:搜索引擎(百度,搜狗)、站内搜索(微博搜索)、电商网站(京东,淘宝)

Lucene和全文检索应用的区别:

Lucene只是一个全文检索引擎工具包(jar包)
全文检索应用是一个可以运行在web应用服务器中,并且可以独立对外提供搜索和索引服务

全文检索和数据库like查询的区别

数据查询通常的做法是是通过数据库模糊匹配即Like '%keyword%'的方式,
通过它和全文检索对比来分析数据库like模糊查询和全文检索的区别。

数据结构

结构化数据

数据库中存储的数据是结构化数据,即行数据,可以用二维表结构来逻辑表达实现的数据,
结构化数据是指具有固定格式或有限长度的数据,如数据库元数据等。

非结构化数据

不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,
包括所有格式的办公文档、文本、图片、标准通用标记语言下的子集XML、HTML、各类报表、图像和音频/视频信息等等。

    1.非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。
    2.半结构数据:就是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)
      和完全无结构的数据(如声音、图像文件等)之间的数据,HTML、XML文档就属于半结构化数据,
      数据的结构和内容混在一起,没有明显的区分。

搜索原理

顺序扫描

数据库的like查询采用顺序扫描的方法匹配字符串,查找结构化数据中存在某字符串的记录,如下:
查询table表中title字段出现XXXX字符的记录。
select * from table where title like ‘%XXXX%’

windows的搜索也是顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的搜索,
对于每一个文档,从头找到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。

顺序扫描问题:如果要查询的目标数据源量大且内容多,采用顺序扫描方法查询过程较慢,
比如你有一个几十G的硬盘,如果想在上面找到一个内容包含某字符串的文件,将会非常耗时。
什么时候使用顺序扫描?对于查询的目标数据源量小、内容少的情况时采用顺序扫描是很快的。

全文检索

对于查询目标数据源量大且内容多时,特别是如果查询的数据源为非结构化数据,这时就要采用全文检索方法进行查询。
全文检索首先将要查询的目标数据源中的一部分信息提取出来,组成索引,通过查询索引达到搜索目标数据源的目的,所以速度较快。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。

搜索效果

匹配准确性

使用数据库like搜索关键字“java”会把“javascript”也查询出来,因为javascript和'%java%'匹配。
使用搜索引擎搜索关键字“java”不会把“javascript”查询出来,
因为在对“javascript”创建索引时不会把“java”抽取出来放在索引中,
而是把“javascript”当成一个整体放在索引中,在进行全文检索时根据“java”在索引中找不到,通过“javascript”是可以找到的。

相关度排序

使用数据库like搜索关键字“java”,查询结果中不会把与关键字相关度最高的记录排在最前边,
数据库的排序只能根据由高到低或按字母顺序排序。
使用搜索引擎搜索关键字“java”,查询结果中会把关键字相关度最高的记录排在最前边,
在进行全文检索时会计算哪些记录与关键字的相关度最高,最高相关度的记录会排在前边。

搜索速度

使用数据库like搜索,如果目标数据源记录多且内容大,查询速度慢。
使用搜索引擎搜索,速度非常快。

应用领域

数据库like查询

对于数据量不大、数据结构固定的数据可采用关系数据库存储,通过关系数据库提供的模糊匹配方式查询用户需要的数据,
比如学校的学生管理系统、企业人事管理系统等。

全文检索

对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,
比如百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。