我想根据情况将一个实体索引到不同的索引。
例如,如果我有一个如下所示的水果实体
@Indexed
public class Fruit {
@NumericField(forField = "id")
private Long id;
@Field(analyze = Analyze.NO)
private String name;
}
是否可以根据名称值索引到不同的索引?
名称 = "苹果" -> index_1
名称 = "橙色" -> index_2
首先,我建议您重新考虑是否真的需要这个。
如果每个"水果名称"的数据集完全不同(有些字段只为一个"水果名称"填充,或者它们的内容对于一个"水果名称"要大得多(,那么这是有意义的。我个人会重新考虑类型层次结构,但这并不总是您可以控制的。 话虽如此,请注意,目前您仍然必须对两个"水果名称"使用相同的映射(相同的字段(;您将只有两个不同的索引,它们可能具有不同的低级设置(存储选项等(。
如果每个"水果名称"的数据集相似(相同的字段,相似的内容,经常一起查询(,那么将它们拆分到两个索引中几乎没有功能上的收获:您只需要担心备份时的文件数量增加一倍,等等。 您可能会获得性能改进,但同样,通过调整合并设置来控制组成索引的段数,您可以获得类似的结果。
如果您真的需要根据"水果名称"对数据进行分区......这是如何做到的。该功能称为"分片":
- 请参阅此处了解休眠搜索 5。这将适用于Lucene集成,但我不确定Elasticsearch集成。
- 请参阅此处的Hibernate搜索6。这仅适用于 Lucene 集成。
在未来的更新中,Hibernate Search 6将具有基于属性对单一类型数据进行分区的专用功能;请参阅HSEARCH-3683。目前,您只能使用路由/分片。