Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

对数据进行建模以支持关键字搜索

在此页面上

  • 模式
  • 关键字索引的局限性

注意

关键字Atlas Search文本Atlas Search或Full Text Search不同,并且不提供词干提取或其他文本处理功能。 有关更多信息,请参阅“关键字索引的限制”部分。

在2.4中,MongoDB 提供了文本搜索功能。有关更多信息,请参阅自管理部署上的文本索引。

如果您的应用程序需要对包含文本的字段内容执行查询,您可以对文本执行精确匹配,或运用 $regex 来使用正则表达式模式匹配。但是,对于针对文本的很多操作,这些方法无法满足应用程序要求。

此模式描述一种使用 MongoDB 支持关键字搜索以支持应用程序搜索功能的方法,该方法使用在与文本字段相同的文档数组中存储的关键字。这种模式与多键索引相结合,可支持应用程序的关键字搜索操作。

要向文档添加结构以支持基于关键字的查询,请在文档中创建数组字段,并将关键字作为字符串添加到数组中。然后,您可以在数组上创建多键索引,并创建从数组中选择值的查询。

例子

给定一系列您想要提供基于主题的搜索的库卷。对于每个卷,您添加数组 topics,并根据给定卷的需要添加任意数量的关键字。

对于 Moby-Dick 卷,您可能有以下文档:

{ title : "Moby-Dick" ,
author : "Herman Melville" ,
published : 1851 ,
ISBN : 0451526996 ,
topics : [ "whaling" , "allegory" , "revenge" , "American" ,
"novel" , "nautical" , "voyage" , "Cape Cod" ]
}

然后,您可以在 topics 数组上创建多键索引:

db.volumes.createIndex( { topics: 1 } )

多键索引为 topics 数组中的每个关键字创建单独的索引条目。例如,索引包含一个 whaling 条目和另一个 allegory 条目。

然后根据关键字进行查询。例如:

db.volumes.findOne( { topics : "voyage" }, { title: 1 } )

注意

具有大量元素的数组(例如具有数百或数千个关键字的数组)将在插入时产生更高的索引成本。

MongoDB 可以使用特定的数据模型和多键索引支持关键字搜索;但是,这些关键字索引在以下方面不足以与全文产品相提并论:

  • 词干提取。MongoDB 中的关键字查询无法解析关键字以获取根词或相关词。

  • 同义词。基于关键字的搜索功能必须为应用程序层中的同义词或相关查询提供支持。

  • 排名。本文档中描述的关键字查找不提供对结果进行权重的方法。

  • 异步索引。MongoDB 同步构建索引,这意味着用于关键字索引的索引始终是最新的并且可以实时操作。但是,对于某些类型的内容和工作负载,异步批量索引可能更有效。

后退

IOT 数据