我希望有人能告诉我处理以下情况的最佳方法是什么:
我在数据库中有三种类型的实体(e1,e2,e3),每种实体都在自己的表中。这些实体有自己的主键(e1。[k1],e2。[k2],e3。[k3])和一些常见字段和一些独特字段。
e1.[k1], e1.k2?, e1.k3?, e1.commonfield, e1.uniquefield
e2.[k2], e2.k3?, e2.commonfield
e3.[k3], e3.commonfield
其中:[主键],可选吗?
目前,我正在使用四个核心,其中三个映射到这些实体,并拥有自己的import / deltaImport,它使用该特定实体的主键进行导入。第四个核心使用其他三个作为分片,因此可以同时搜索所有三种实体类型。这要求所有四个核心的模式都相同。
[id], k1?, k2?, k3?, commonfield, uniquefield?
通过连接主键值,使用CloneFieldUpdateProcessorFactory / ConcatFieldUpdateProcessorFactory生成Solr文档ID。
我怀疑这是否是正确的方法。从技术上讲,这不是分片的候选者,但我不确定我能够或应该遵循的其他方法。对于这个特例,这是一个好方法吗?有更好的选择吗?
谢天谢地。
答案 0 :(得分:1)
这三个实体的内容和数量有多大?多少列?
如果内容较小,则索引大小仍然可以在单核中管理。
您仍然可以将所有数据保存在一个Core中。
此外,您可以根据实体将主要设计为唯一,并将其他字段设置为普通字段。
字段: - id, k1, k2, k3, commonfield, uniquefield, entity_type
Solr的唯一密钥id字段,将按实体分配值,以便保持唯一性。
例如
e1的主键 - > E1 + K1
e2的主键 - > E2 + K2
e3的主键 - > e3 + k3
按原样维护其他字段
您还可以添加具有值e1,e2,e3的entity_type字段,以便能够在每个实体上进行过滤。
这种方法也适用于分片。