首先数据是分为 结构化 和 非结构化的:
非结构化数据的检索一般用下面2个方法:
- 顺序扫描法
- 全文搜索
顺序扫描法,例:找一个包含 某字符 的文件,那么它会一个文件一个文件的查找,这个文件从头查到尾,直到找到为止。【适用于小数据量文件,因为要担心效率】
全文搜索:把一些非结构化的数据 转为 结构化的数据,然后创建索引,实现搜索的目的【一般查询大文件、多文件 什么的..】,例:字典,里面有拼音、偏旁部首、笔画..这些就是 规则 或者说是 索引(结构化了)。
全文搜索实现原理:
建立文本库 数据源
建立索引 提取规律
执行搜索 用户发起
过滤结构 查询到的有些可能是脏数据等。。
返回结果 用户接受
全文搜索实现技术
基于Java开源实现:
- Lucene
- ElasticSearch
- Solr
Lucene:基于全文检索和搜寻的开源程序库,由Apache软件基金会支持和提供,有一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。【貌似仅支持Json 和 Xml ,但未证实】