如何在超过 10 亿行的集合上实现全文搜索?

问题描述 投票:0回答:1

因此,我正在开发一款人工智能图像生成应用程序,并提出了全文搜索功能,该功能允许用户根据提示搜索所有生成的图像。问题是我们的图像集合超过 10 亿行。后端团队反驳说,他们过去尝试过这种方法,但性能不佳,因为集合/表太大,有时需要长达 8 秒的时间。现在我相信这可能是因为他们正在对超过 10 亿个表/集合进行全文搜索,但如果我们首先根据 userID 过滤它进行查询,然后对那个小得多的集合执行全文搜索,那么它的性能会很高,对吧?我只知道 SQL 数据库,所以我不确定,但 mongodb 也不相似吗?如果您知道更有效的方法来做到这一点,请提供您的建议🙏

database mongodb mongodb-query
1个回答
0
投票

是的,通过首先按用户 ID 过滤集合,然后对较小的文档子集执行全文搜索,可以提高大型 MongoDB 集合的全文搜索性能。但是,如果集合仍然很大,这种方法可能还不够。 您可能需要考虑使用专为高性能全文搜索而设计的专用搜索引擎,可以处理非常大的数据集。

MongoDB 可以检索具有特定 userID 值的文档的所有 GUID。如果 userID 字段已建立索引,则这是一个快速操作。然后,您可以从每个文档中请求提示字段。最后,您可以搜索提示字段集合。

但是,大型数据库上的全文查询需要标记化,而 MongoDB 并不是为此设计的。标记化创建单词到短语以及单词到文档的映射。为此,您需要将数据库文本和 GUID 输入到搜索引擎(例如 Solr 或 Elasticsearch)中。

以下是一些提高大型 MongoDB 集合全文搜索性能的其他技巧:

  • 在用户 ID 和提示字段上使用复合索引。这将允许 MongoDB快速查找与userID匹配的所有文档 包含提示文字。
  • 在提示字段中使用通配符索引。 这将允许 MongoDB 匹配包含任何变体的文档 提示文本,包括同义词和缩写。
  • 使用 $search 聚合管道阶段执行全文搜索。此阶段比全文的 $regex 运算符更有效 搜索。

注意:在写入量很大的数据库中更新索引可能会降低性能,特别是当您的写入量多于读取量时。

© www.soinside.com 2019 - 2024. All rights reserved.