分享

Lucene全文检索处理非结构化数据

 春和秋荣 2019-07-27

一、数据分类
结构化数据:指具有固定格式或有限长度的数据,可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。所以,结构化的数据的存储和排列是很有规律的,这对查询和修改等操作很有帮助。但是,显然,它的扩展性不好(比如,我希望增加一个字段,怎么办?)。
半结构化数据:是结构化数据的一种形式,它并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层。因此,它也被称为自描述的结构。半结构化数据,属于同一类实体可以有不同的属性,即使他们被组合在一起,这些属性的顺序并不重要。常见的半结构数据有XML和JSON
非结构化数据:指不定长或无固定格式的数据,就是没有固定结构的数据。各种文档、图片、视频/音频等都属于非结构化数据。对于这类数据,我们一般直接整体进行存储,而且一般存储为二进制的数据格式。
二、数据查询方法
结构化数据:sql语句查询
非结构化数据:1、顺序扫描法:从第一个文件扫描到最后一个文件、从每一个文件的开始扫描到结尾
2、全文检索:将非结构化数据中的一部分信息提取出来,重新组织,建立索引,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
三、全文检索的实现方式
1、Lucene:Lucene是apache下的一个开放源代码的全文检索引擎工具包。
2、solr
四、全文检索应用场景
对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,比如百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。百度、Google等利用爬虫技术,爬到页面等非结构化数据,然后利用全文检索技术建立索引,供用户查询。
五、Lucene实现全文检索
1)索引过程
确定原始内容即要搜索的内容à采集文档à创建文档对象à分析文档即分词à索引文档
1.互联网上、数据库、文件系统
2.从互联网上、数据库、文件系统中等获取需要搜索的原始信息,这个过程就是信息采集
3.在索引前需要将原始内容创建成文档(Document),文档中包括一个一个的域(Field),域中存储内容,每个文档都有一个唯一的编号,就是文档id。
4.将原始内容创建为包含域(Field)的文档(document),需要再对域中的内容进行分析,分析的过程是经过对原始文档提取单词、将字母转为小写、去除标点符号、去除停用词等过程生成最终的语汇单元,语汇单元中和它所属的域名组成一个一个Term,不同的域中拆分出来的相同的单词是不同的term。term中包含两部分一部分是文档的域名,另一部分是单词的内容。
5.分析就是指:将域(Field)文本转换成最基本的索引表示单元---项(Term)的过程。而项(Term)又是由语汇单元(Token)以及它所属的域名组合而成的。最终要实现只搜索被索引的语汇单元从而找到Document(文档)
6.创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构。
传统方法是根据文件找到该文件的内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大、搜索慢。倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

2)搜索过程
用户通过搜索界面提交搜索关键字à创建查询对象,生成查询语法à执行搜索,从索引库搜索à渲染搜索结果返回给用户
1.需要根据自己的需求开发搜索界面
2.用户输入查询关键字执行搜索之前需要先构建一个查询对象,查询对象中可以指定查询要搜索的Field文档域、查询关键字等,查询对象会生成具体的查询语法
3.根据查询语法在倒排索引词典表中分别找出对应搜索词的索引,从而找到索引所链接的文档链表。
比如搜索语法为“fileName:lucene”表示搜索出fileName域中包含Lucene的文档。
搜索过程就是在索引上查找域为fileName,并且关键字为Lucene的term,并根据term找到文档id列表。
4.以一个友好的界面将查询结果展示给用户,比如搜索结果中将关键字高亮显示
lucene下载地址http://lucene./

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多