Lucene/ ElasticSearch这类的搜索引擎和SQL数据库里的查询/全文检索有什么区别?
一、Lucene/ ElasticSearch这类的搜索引擎和SQL数据库里的查询/全文检索的区别
es也可以理解成是一种数据库,不仅能提供全文检索功能,还可以支持各种数值类的区间查询,聚合计算等,这些和传统数据库一样,从使用场景来说,数据库一般用来存meta,比如网站用户,用户资源等等,这些数据有个特点就是量不会很大,还有就是这些数据一般都比较结构化。
es一般用来存一些流式数据,比如应用日志,这也是目前es应用最广的方面,这些数据有个特点就是往往结构不固定,比如应用日志,不同的程序员写得模块打出来的日志字段数量都不一样,这种数据就不太方便用数据库来处理。
最后,一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。
上面从使用场景上说明了两者的区别,从技术上两者全文检索的实现都差不多,无非是倒排索引,但是lucene毕竟是专业的,做了十几年了,索引效率,存储空间等都比传统数据库快很多,技术也迭代的非常快。
延伸阅读:
二、 Lucene是什么
Lucene是Apache基金会jakarta项目组的一个子项目;Lucene是一个开放源码的全文检索引擎工具包,提供了完整的查询引擎和索引引擎,部分语种文本分析引擎;Lucene并不是一个完整的全文检索引擎,仅提供了全文检索引擎架构,但仍可以作为一个工具包结合各类插件为项目提供部分高性能的全文检索功能;现在常用的ElasticSearch、Solr等全文搜索引擎均是基于Lucene实现的。索引的生成分为两个部分:
1)创建阶段:
添加文档阶段,通过IndexWriter调用addDocument方法生成正向索引文件;文档添加后,通过flush或merge操作生成倒排索引文件。2) 搜索阶段:
用户通过查询语句向Lucene发送查询请求;通过IndexSearch下的IndexReader读取索引库内容,获取文档索引;得到搜索结果后,基于搜索算法对结果进行排序后返回。
猜你喜欢LIKE
相关推荐HOT
更多>>
线程池执行过程中遇到异常会发生什么,怎样处理?
线程池执行过程中遇到异常以及处理线程池执行过程中遇到异常会触发一系列的处理机制。当线程池中的某个线程抛出未捕获的异常时,线程将立即终止...详情>>
2023-10-16 22:10:11
为什么说PHP与Swoole是优异组合?
PHP与Swoole在Web开发和网络编程领域中,共同构成了一种强大的解决方案。什么是PHPPHP是一种广泛使用的开源服务器端脚本语言,特别适用于Web开...详情>>
2023-10-16 20:56:37
有什么好用的redis可视化管理工具?
一、Redis Desk较好 ManagerRedis Desk较好 Manager是一款非常受欢迎的Redis数据库管理工具。它支持直接进行数据修改、删除和新增等操作,而且...详情>>
2023-10-16 19:30:54
mysql怎么查询连续时间段的最大值?
一、mysql怎么查询连续时间段的最大值按仪器与时间(处理成小时)group by,计算值的数量与和,再根据结果判断值数量是否有缺失值,以及和的最...详情>>
2023-10-16 15:15:18热门推荐
Oracle怎么连接数据库?
沸git pull 和git fetch的区别?
热JDK动态代理为什么必须要基于接口?
热线程池执行过程中遇到异常会发生什么,怎样处理?
新HTTP协议中URI和URL有什么区别?
为什么说PHP与Swoole是优异组合?
显示器的 VGA、HDMI、DVI 和 DisplayPort 接口有什么区别?
如何删除需要使用管理员权限才能删除的文件?
有什么好用的redis可视化管理工具?
arm架构和x86架构有什么区别?
GitLab为什么选择Vue.js?
实现atoi函数时需要注意什么?
Ruby中为什么不能显式的调用私有方法?
与数据库的连接为什么会很耗时、耗费资源?
技术干货






