关于整合数据库查询和全文搜索功能的备忘录(Oracle、MongoDB、Elasticsearch、Couchbase)
首先
现在的应用程序中,除了常见的基于SQL实现的一般搜索外,对于文本进行全文搜索的需求是很常见的。大多数关系型数据库管理系统提供了基于B树的索引功能来满足前一种需求。对于文本搜索的需求,通常使用基于Lucene的搜索引擎,例如ElasticSearch和Solr。
与Oracle中的全文搜索功能集成
此外,我们还可以看到将全文搜索功能整合到现有数据库中的趋势。虽然无法详述每一个具体方法,但以下是Oracle中的一个应用示例。
-
- Oracle B2B ServiceにおけるElasticSearch機能提供
- Oracle NoSQLとElasticSearchとの統合
在将关系型数据库(RDBMS)和ElasticSearch的功能整合时,会面临一些特定的挑战。以下是一些示例。
-
- Luceneベースの検索はJOINをサポートしていないため、データモデルを大幅に非正規化する必要がある
-
- ElasticSearch APIを使用して検索を実装するための開発作業。
- ElasticSearchをセットアップするためのリソース要件、およびElasticSearchへRDBMSのデータを取り込むためのストレージ要件。
在MongoDB中与全文搜索功能的集成
MongoDB Atlas Search 在其托管服务 Atlas 中添加了基于 Lucene 的搜索功能,使用了其查询语言 MQL。
关于将搜索功能集成到MongoDB MQL中,已知有以下限制。
-
- Atlasでのみ利用でき、オンプレミス製品では利用できない。
- 全文検索は、aggregate()パイプライン内の最初の操作としてのみ実行可能
从ElasticSearch到SQL的方法
相反地,也可以看到从ElasticSearch方面开启使用SQL的动态。
-
- ElasticsearchにおけるSQLの使用
- Open Distro for Elasticsearch
毫无疑问,这种方法也有其固有的局限性(在下面的官方网站上整理了)。
- SQL Limitations
在Couchbase中将SQL和全文搜索进行整合。
Couchbase在历史上一直支持查询语言和全文搜索功能。Couchbase的查询语言N1QL支持几乎所有在成熟的数据库中可用的操作。例如,支持类似关系型数据库的连接操作、聚合操作、基于规则和成本进行查询优化。此外,还包含了NEST、UNNEST、ARRAY等附加功能,N1QL将对JSON文档特有的数据结构的操作整合到了SQL中。
在Couchbase的N1QL中,一个重要的要点是它将全文搜索功能无缝集成到N1QL语言中。
- Couchbase 6.6 Flex Index
当然,Couchbase也面临着一些特定的挑战。例如,对于CJK(中日韩)语言的支持仅限于基本的Unicode规定水平,并且不支持用户自定义词典。
最终
本文整理了随着全文搜索功能需求的增加和普及,各种数据库中全文搜索功能与查询语言的集成的进展情况。
仅为参考
甲骨文所创建的NoSQL数据库,其本质是什么?
发布支持Couchbase的Flex索引。