我想根据情况将一个实体编入不同的索引。
例如,如果我有如下所示的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
答案 0 :(得分:0)
首先,我建议您重新考虑是否确实需要此功能。
如果每个“水果名称”的数据集都大不相同(某些字段只填充了一个“水果名称”,或者它们的内容对于一个“水果名称”来说要大得多),那么就可以理解。我个人会重新考虑类型层次结构,但这并不总是可以控制的。 话虽如此,请注意,当前您仍然必须为两个“水果名称”使用相同的映射(相同的字段);您将只有两个不同的索引,它们的底层设置可能不同(存储选项等)。
如果每个“水果名称”的数据集都是相似的(相同的字段,相似的内容,经常被查询到一起),那么将它们分为两个索引在功能上几乎没有好处:您只需要担心两次备份时有很多文件,等等。 您可能会获得性能上的改善,但是通过调整merge settings来控制组成索引的段数,您又可以得到类似的结果。
如果您确实需要根据“水果名称”对数据进行分区,请按照以下步骤操作。该功能称为“分片”:
Hibernate Search 6在将来的更新中将具有专用功能,可基于属性对单一类型的数据进行分区;参见HSEARCH-3683。目前,您只能使用路由/分片。