休眠搜索将一个实体索引到两个不同的索引

时间:2020-06-04 15:46:51

标签: java hibernate elasticsearch indexing hibernate-search

我想根据情况将一个实体编入不同的索引。

例如,如果我有如下所示的Fruit实体

@Indexed
public class Fruit {

    @NumericField(forField = "id")
    private Long id;

    @Field(analyze = Analyze.NO)
    private String name;
}

是否可以根据名称值索引到不同的索引?

name =“ apple”-> index_1

name =“ orange”-> index_2

1 个答案:

答案 0 :(得分:0)

首先,我建议您重新考虑是否确实需要此功能。

如果每个“水果名称”的数据集都大不相同(某些字段只填充了一个“水果名称”,或者它们的内容对于一个“水果名称”来说要大得多),那么就可以理解。我个人会重新考虑类型层次结构,但这并不总是可以控制的。 话虽如此,请注意,当前您仍然必须为两个“水果名称”使用相同的映射(相同的字段);您将只有两个不同的索引,它们的底层设置可能不同(存储选项等)。

如果每个“水果名称”的数据集都是相似的(相同的字段,相似的内容,经常被查询到一起),那么将它们分为两个索引在功能上几乎没有好处:您只需要担心两次备份时有很多文件,等等。 您可能会获得性能上的改善,但是通过调整merge settings来控制组成索引的段数,您又可以得到类似的结果。

如果您确实需要根据“水果名称”对数据进行分区,请按照以下步骤操作。该功能称为“分片”:

Hibernate Search 6在将来的更新中将具有专用功能,可基于属性对单一类型的数据进行分区;参见HSEARCH-3683。目前,您只能使用路由/分片。