【发布时间】:2012-04-10 09:20:39
【问题描述】:
这实际上更像是一个 Lucene 问题,但它是在 neo4j 数据库的上下文中。
我有一个数据库,它分为 50 种左右的节点类型(其他类型的数据库中的“集合”或“表”)。每个都有一个需要索引的属性子集,有些名称相同,有些则没有。
搜索时,我总是希望找到特定类型的节点,而不是跨越所有节点。
我可以看到三种组织方式:
每种类型一个索引,属性自然映射到索引字段:索引'foo',
'id'='1234'。单个全局索引,每个字段映射到一个属性名称,以区分类型或者将其作为值的一部分 (
'id'='foo:1234') 或在节点返回后检查节点(我希望重复非常罕见)。单个索引,类型是字段名称的一部分:
'foo.id'='1234'。
一旦创建,数据库就是只读的。
其中一项在便利性、大小/缓存效率或性能方面有什么好处吗?
据我了解,对于第一个选项,neo4j 将为每种类型创建一个单独的物理索引,这似乎不是最理想的。第三,我最终发现大多数 lucene 文档只有一小部分字段,不确定这是否会影响任何内容。
【问题讨论】:
-
为每种类型设置一个单独的索引似乎更方便也更快,因为索引的整体大小会更小。但我可能会遗漏一些东西。
-
@biziclop:实际上这对我来说似乎最不方便,因为我必须管理打开/关闭各个索引。我的理解是整体尺寸也会更大(见 jpountz 的回答)。
-
@Dimitri 好吧,显然整体大小会更大,问题是:所有类型的搜索在时间上是否均匀分布?还是某些类型的搜索频率高于其他类型?无论哪种方式,我要做的是实施我认为最方便的解决方案,看看它是否表现良好。如果是这样,你就有了赢家。
-
我同意,我只是想找出我认为最方便的方法:)
标签: java lucene indexing neo4j