加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Neo4j索引(使用Lucene) – 组织节点“类型”的好方法

发布时间:2020-12-14 19:18:53 所属栏目:Java 来源:网络整理
导读:这实际上更像是一个Lucene问题,但它是在neo4j数据库的上下文中. 我有一个数据库,它被分为50个左右的节点类型(所以“其他类型的dbs中的”集合“或”表“).每个属性都有一个需要索引的属性子集,有些属性名称相同,有些则没有. 搜索时,我总是希望找到特定类型的

这实际上更像是一个Lucene问题,但它是在neo4j数据库的上下文中.

我有一个数据库,它被分为50个左右的节点类型(所以“其他类型的dbs中的”集合“或”表“).每个属性都有一个需要索引的属性子集,有些属性名称相同,有些则没有.

搜索时,我总是希望找到特定类型的节点,而不是所有节点.

我可以看到三种组织方式:

>每种类型一个索引,属性自然映射到索引字段:index’foo’,’id’=’1234′.
>单个全局索引,每个字段映射到属性名称,以区分类型或者将其包含为值的一部分(‘id’=’foo:1234’)或者在返回节点后检查它们(我希望重复这些节点)非常罕见).
>单个索引,类型是字段名称的一部分:’foo.id’=’1234′.

创建后,数据库是只读的.

在便利性,大小/缓存效率或性能方面,其中之一是否有任何好处?

据我所知,对于第一个选项,neo4j将为每种类型创建一个单独的物理索引,这似乎不是最理想的.对于第三个,我最终得到的大多数lucene文档只有一小部分字段,不确定是否会影响任何内容.

最佳答案
单个索引将小于几个小索引,因为某些数据(例如术语词典)将被共享.但是,由于术语字典查找是O(lg(n))操作,因此在较大术语字典中查找可能会慢一些. (如果你有50个索引,这只需要6(2 ^ 6> = 50)个比较,你可能不会注意到任何差异.)

较小索引的另一个优点是OS缓存可能使查询运行得更快.

而不是你的选项2和3,我会索引两个不同的字段id和类型并搜索(id:ID AND type:TYPE),但我不知道是否可以使用neo4j.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读