我有Mongo集合Items
,其中包含动态项目对象。目前我有超过300万条记录。我在MongoSharp中使用C#,但我认为它与我的问题无关。
以下是Item
示例(它的字段多于3 ):
{
_id : "1234567890",
Code : 888596937,
RefNumber : "GHTZKL",
...
}
AFAIK使用TextSearch毫无意义,因为它不是真正的单词,只是一些代码所以它不会给我任何有益的东西。我也不能将它们全部编入索引,因为那时我必须索引每一个字段。
现在,当我过滤数据时,需要大约1-3秒(在ssd上)。有什么方法可以让我更快地过滤我的物品,或者它能尽快得到它?
答案 0 :(得分:0)
您没有提到要搜索的字段,但听起来您想搜索任意属性。这是一个常见的设计,并与MongoDB的反模式接壤。避免现在收集的收集扫描的唯一方法是索引要搜索的字段,但是当您不知道字段将提前是什么时,将索引每个字段。可能。对此的解决方案仅命名公共字段(及其上的索引),然后将其他字段分组到文档中的数组中的名称/值对。然后,您可以索引该数组以进行快速搜索。
关于NVP阵列的一个警告:如果你的阵列变得非常大(数百个属性),你的索引大小将会大幅增加。尝试保持阵列尺寸相当小是最好的。
有关此设计模式的详细信息,请参阅Asya' great writeup。