0

我希望有人能告诉我处理以下情况的最佳方法是什么:

我在数据库中有三种类型的实体(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?

Solr 文档 ID 是使用 CloneFieldUpdateProcessorFactory / ConcatFieldUpdateProcessorFactory 通过连接主键值生成的。

我怀疑这是否是正确的方法。从技术上讲,这不是分片的候选者,但我不确定我可以或应该遵循什么其他方法。对于这个特定的例子,这是一个好方法吗?有更好的选择吗?

非常感谢你。

4

1 回答 1

1

这三个实体的内容和数量有多大?有多少列?
因为如果内容较少,索引大小仍然可以在单核中进行管理。您仍然可以将所有数据保存在单个核心中。

您还可以根据实体将您的主要设计为唯一的,并将其他字段作为普通字段。

领域:-id, k1, k2, k3, commonfield, uniquefield, entity_type

Solr 的唯一键 ID 字段,将根据实体分配值,以便保持唯一性。例如
e1 的主键 -> e1+k1
e2 的主键 -> e2+k2
e3 的主键 -> e3+k3

并保持其他字段不变。
您还可以添加 entity_type 字段,该字段将具有值 e1、e2、e3 以便能够在每个实体上根据需要进行过滤。
这种方法也适用于分片。

于 2013-09-06T09:21:48.570 回答