百度百科: 全文数据库是全文检索系统的主要构成部分。所谓全文数据库是将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合。全文数据库不仅存储了信息,而且还有对全文数据进行词、字、段落等更深层次的编辑、加工的功能,而且所有全文数据库无一不是海量信息数据库。
在我们开发中通常分为两种数据类型,结构化/非结构化
结构化数据:结构化数据指的是在我们使用之前已经定义好的、固定长度大小、固定结构的数据类型,例如:数据库中的字段,在我们使用数据库之前就会对该表的字段进行定义成字符类型,或者数值类型,一旦定义就必须按照该结构进行存储;
非结构化数据:非结构化数据则指的是存储在我们磁盘中的文件,例如doc文档、邮件等等,我们并不能固定该数据必须要求指定的类型、大小;
非结构化数据通常使用两种查询方法
1)顺序扫描:所谓顺序扫描就是对整个文件从头到尾挨个挨个进行查找,类似于Windows中的全盘查找,查询效率很慢;
全文检索技术通常应用在对大量数据进行查找的模块中,例如:淘宝、京东的商品搜索,百度、谷歌的搜索引擎,都是在海量数据中查找匹配的内容;
有朋友可能会好奇,我用数据库SQL也能实现搜索呀,为什么偏偏要引入检索技术不是多此一举吗?
SQL实现搜索:select * from 表名 where name like ‘%xx%’;
分析以上SQL:使用like关键字确实能实现搜索技术,而且相当方便、简单,但是在不建索引的情况下相当于是对所有数据进行匹配,并且like关键字只能实现指定字段包含匹配的固定字符,如果用户误输一个字符,匹配的结果会千差万别,像淘宝、京东的大型应用以亿为单位的数据量,使用like关键字查询的速度也就可想而知;
Lucene是Apache旗下的一款使用Java开发的开源全文检索工具库,可以理解为全文检索技术的底层API,Lucene实现了强大、准确、高效的搜索算法,市场上主流的搜索引擎Solr、ElasticSearch都是基于Lucene开发的,所以学习搜索技术,Lucene是必会的基础;


创建索引代码:
}

什么时候需要分词?
什么时候需要索引?
如果需要用到这个字段匹配,就必须要创建索引;
什么时候需要分词?
首先这个字段值应该属于用户搜索匹配的值,再判读该值是否属于可分割值,例如订单号就属于不可分割字段不建议使用;
什么时候需要存储?
如果该字段要求要显示到最终结果中,那么就需要被存储;

Document:文档对象,相当于一个需要进行索引的单元,可以是文本、字符串、数据库记录,用于获取所有域的集合,通过add方法将Faield域存入,也可以使用removeField方法删除;
Analyzer:分词器对象,用于对文档内容指定规则创建分词,这里我使用的第三方分词器IKAnalyzer,这是一款开源中文分词器,采用了特有的”正向迭代最细粒度切分算法”,支持细粒度和智能分词两种切分模式,需要引入相关依赖才能使用;



IndexReader:索引读取对象,基于Directory对象创建,往索引库中读取数据;
IndexSearcher:索引搜索对象,基于读取对象创建,可以通过search方法查询指定条件及指定结果条数;
Query:索引查询条件对象,Lucene会根据该对象生成的查询条件以及返回结果数在索引库进行筛选,可以通过Query子类或QueryParse查询解析器两种方式创建查询对象;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170220.html