我在集合中的每个文档中都有一个关键字数组。
这个嵌入式数组在每个文档中最多可以容纳 15 个单词。
该集合有数百万的文档。
用户只需单击一个关键字即可获得具有相同关键字的前 20 个文档。
我应该只在该字段上创建一个多键索引还是使用 Lucene 来索引该关键字字段?
MongoDB的关键字搜索在数组索引上的表现如何?
这似乎是自然的选择,因为 Lucene/Solr 似乎有点过分了。
在我选择之前对此有何评论?
我在集合中的每个文档中都有一个关键字数组。
这个嵌入式数组在每个文档中最多可以容纳 15 个单词。
该集合有数百万的文档。
用户只需单击一个关键字即可获得具有相同关键字的前 20 个文档。
我应该只在该字段上创建一个多键索引还是使用 Lucene 来索引该关键字字段?
MongoDB的关键字搜索在数组索引上的表现如何?
这似乎是自然的选择,因为 Lucene/Solr 似乎有点过分了。
在我选择之前对此有何评论?
您可以将 memcache 添加到服务器端代码中,因为您似乎要做的是进行大量读取。当您将信息存储在内存中时,这当然会占用大量 RAM,但是由于访问哈希数组,检索速度将非常快:>
您确实说过数百万,这可能会吃掉数百兆:| 取决于文件本身。
您可能需要一些逻辑来处理“查询”,因为您现在应该具有不同的结构。
1..15 个单词的数组必须来自:
Doc 1: {_id:123, keys:[ key0, key1...keyN]}
Doc 2: {_id:456, keys:[ key0, key1...keyM]}
至
Memcache = [];
Memcache[ key0 ] = [ Doc 1, Doc 2 ];
Memcache[ key1 ] = [ Doc 1, Doc 2 ];
...
Memcache[ keyN ] = [ Doc 1 ];
...
Memcache[ keyM ] = [ Doc 2 ];
因此,当您搜索 keyZ 的前 20 个文档时,您只需执行 Memcache[keyZ] 并将结果限制为 20,我预计会有数百/数千个文档。