如果 MongoDB 集合中需要多个文本索引,我该怎么办?

问题描述

我在 MongoDB 中名为 Messages 的集合有很多带有消息内容和元数据的消息。每条消息都有一个 SenderRecipient id,格式为 UUID,后者又是一个 string。在某些用例中,我需要使用相同的 Sender 查询 RecipientUUID,或者仅使用 Sender 或仅使用 Recipient 查询 UUID },或两者都具有不同的 UUID

我为第一种情况创建了一个文本索引,效果很好,但在其他情况下我也需要高效搜索。你有什么建议?我应该调整/改变什么?我无法在同一个集合中定义任何其他文本索引,因为目前 MongoDB 中的文本索引数量存在限制。

注意:我首先不知道文本索引并尝试创建常规索引,但查询根本不使用它们,即使我强制使用它们,查询仍然扫描所有无用的文档。

解决方法

根据 Playground,您需要使用 this 创建索引。

这就是它没有使用索引的原因。

db.Message.createIndex({
  "Sender._id": 1
})

您也可以在 Recipient._id 上拥有另一个索引。根据您的查询,它将使用索引。

我的意思是当您有两个单独的索引时,即一个在 Sender_id 上,另一个在 Recipient._id 上,并且当您查询时,将使用各自的索引。

你的用例不是全文搜索,所以不要为此使用文本索引。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...