原文(英文)参见:http://groonga.org/docs/characteristic.html,author: The Groonga Project. under the CC-BY 3.0 license.
建议阅读原文。
1.1 Groonga概述
Groonga是一个基于反向索引的快速准确的全文搜索引擎。 Groonga的特点之一是,新注册的文件会立即显示在搜索结果中。 此外,Groonga允许更新而没有读锁。 这些特性导致了实时应用的卓越性能。
Groonga也是一个面向列的数据库管理系统(DBMS)。 与诸如MySQL和PostgreSQL等知名行系统相比,面向列的系统更适合于聚合查询。 由于这个优势,Groonga可以弥补行为导向系统的弱点。
Groonga的基本功能在C库中提供。 此外,使用其他语言的Groonga(如Ruby)的库由相关项目提供。 此外,为MySQL和PostgreSQL提供了基于Groonga的存储引擎。 这些库和存储引擎允许任何应用程序使用Groonga。
1.2 全文搜索和即时更新
在广泛使用的DBMS中,立即处理更新,例如,新注册的记录将显示在下一个查询的结果中。相比之下,一些全文搜索引擎不支持即时更新,因为难以动态更新反向索引、底层数据结构。
Groonga还使用倒排索引,但支持即时更新。此外,Groonga还允许您在更新文档集合时搜索文档。由于这些优越的特性,Groonga作为全文搜索引擎非常灵活。此外,Groonga总是显示出良好的性能,因为它将一个大的任务——反向索引合并分成较小的任务。
1.3 列存储和聚合查询
人们可以在互联网时代收集足够多的数据。然而,很难从大型数据库中提取信息知识,这样的任务需要通过试错来进行多方面的分析。例如,按日期、时间和地点搜索细化可能会显示隐藏的模式。聚合查询对于执行此类任务很有用。
聚合查询根据指定的列值对搜索结果进行分组,然后对每个组中的记录数进行计数。例如,其中指定了位置列的聚合查询计算每个位置的记录数。根据聚合查询对日期列的结果进行绘制是一种可视化变化随时间变化的简单方法。此外,根据位置进行细化和针对日期列的聚合查询的组合允许在特定位置随时间变化的可视化。因此,细化和聚合对于执行数据挖掘很重要。
面向列的架构允许Groonga有效地处理聚合查询,因为存储列的数据库允许聚合查询仅访问指定的列。另一方面,面向行的数据库(按行存储记录)的聚合查询必须访问邻居列,即使这些列不是必需的。
1.4 反向索引和分词器
反向索引是用于大规模全文搜索的传统数据结构。基于反向索引的搜索引擎在添加文档时提取索引项。然后在检索中,将查询分为索引项,以查找包含这些索引项的文档。这样,索引项在全文搜索中起着重要的作用,因此提取索引词的方式是更好的搜索引擎的关键。
分词器是提取索引项的模块。日语全文搜索引擎通常使用基于词的分词器(以下称为单词分词器)和/或基于字符的n元分词器(以下称为n-gram分词器)。基于词汇的搜索引擎在时间、空间和精度方面都是优越的,这是搜索结果中相关文档的一小部分。另一方面,基于n-gram分词器的搜索引擎在召回时是优越的,这是完美搜索结果中检索到的文档的一小部分。最佳选择取决于实际应用。
Groonga支持word和n-gram切词(n元切词)。最简单的内置分词器使用空格作为分词符。默认情况下也可以使用内置的n-gram切词(n = 1,2,3)。此外,如果嵌入了词性和形态分析器MeCab,则还可以使用另一种内置单词分词器。请注意,分词器是可插拔的,您可以开发自己的分词器,例如基于另一个词性标注器或命名实体识别器的分词器。
1.5 共享存储和读锁定
多核处理器是当今的主流,每个处理器的核心数量在增加。为了利用多个内核,并行执行多个查询或将查询划分为子查询以进行并行处理变得越来越重要。
Groonga的数据库可以与多个线程/进程共享。此外,即使在另一个线程/进程执行更新查询时,多个线程/进程也可以并行执行读取查询,因为Groonga使用读取无锁的数据结构。此功能适用于执行读取查询时需要更新数据库的实时应用程序。此外,Groonga还允许您构建灵活的系统。例如,数据库可以通过Groonga的内置HTTP服务器接收读取查询,同时通过MySQL接受更新查询。
1.6 地理位置(纬度和经度)搜索
由于使用GPS的移动设备,位置服务变得越来越方便。例如,如果您要在附近的餐厅享用午餐或晚餐,那么当地的餐厅搜索服务可能非常有用,对于这些服务,快速的地理位置搜索变得越来越重要。
Groonga提供基于反向索引的快速地理位置搜索,它支持查询以查找矩形或圆形的点。 Groonga高度重视靠近一个地区中心的地方。此外,Groonga支持距离测量,您可以从任何点距离点分类。
1.7 Groonga库
Groonga的基本功能在C库中提供,任何应用程序都可以使用Groonga作为全文搜索引擎或面向列的数据库。此外,相关项目中还提供了C/C++以外的其他语言库(如Ruby)。
1.8 Groonga服务器
Groonga提供了一个内置的服务器命令,支持HTTP、memcached二进制协议和Groonga查询传输协议(GQTP)。此外,Groonga服务器支持查询缓存,这显着减少了重复读取查询的响应时间。使用此命令,即使在不允许安装新库的服务器上,也可以使用Groonga。
1.9 Mroonga存储引擎