如果 MongoDB collection 中需要多个文本索引怎么办?
What do I do if I need more than one text index in a MongoDB collection?
我在 MongoDB 中名为 Messages
的 collection 有很多带有消息内容和元数据的消息。每条消息都有一个 Sender
和 Recipient
id,格式为 UUID
,又是 string
。在某些用例中,我需要使用相同的 UUID
查询 Sender
和 Recipient
,或者仅使用 UUID
查询 Sender
或仅查询 Recipient
],或两者都具有不同的 UUID
s.
我为第一种情况创建了一个文本索引,效果很好,但我也需要在其他情况下进行高效搜索。你有什么建议?我应该tweak/change做什么?我无法在同一 collection 中定义任何其他文本索引,因为截至目前 MongoDB 中的文本索引数量存在限制。
注意:我一开始不知道文本索引并尝试创建常规索引,但查询根本不使用它们,即使我强制使用它们,查询仍然会扫描所有文档,这是没用。
根据 playground,您需要使用 this 创建索引。
这就是它没有使用索引的原因。
db.Message.createIndex({
"Sender._id": 1
})
您还可以在 Recipient._id
上创建另一个索引。根据您的查询,它将使用索引。
我的意思是当您有两个单独的索引时,即一个在 Sender_id
上,另一个在 Recipient._id
上,当您查询时,将使用各自的索引。
并且您的用例不是全文搜索,因此不要为此使用文本索引。
我在 MongoDB 中名为 Messages
的 collection 有很多带有消息内容和元数据的消息。每条消息都有一个 Sender
和 Recipient
id,格式为 UUID
,又是 string
。在某些用例中,我需要使用相同的 UUID
查询 Sender
和 Recipient
,或者仅使用 UUID
查询 Sender
或仅查询 Recipient
],或两者都具有不同的 UUID
s.
我为第一种情况创建了一个文本索引,效果很好,但我也需要在其他情况下进行高效搜索。你有什么建议?我应该tweak/change做什么?我无法在同一 collection 中定义任何其他文本索引,因为截至目前 MongoDB 中的文本索引数量存在限制。
注意:我一开始不知道文本索引并尝试创建常规索引,但查询根本不使用它们,即使我强制使用它们,查询仍然会扫描所有文档,这是没用。
根据 playground,您需要使用 this 创建索引。
这就是它没有使用索引的原因。
db.Message.createIndex({
"Sender._id": 1
})
您还可以在 Recipient._id
上创建另一个索引。根据您的查询,它将使用索引。
我的意思是当您有两个单独的索引时,即一个在 Sender_id
上,另一个在 Recipient._id
上,当您查询时,将使用各自的索引。
并且您的用例不是全文搜索,因此不要为此使用文本索引。