gpt4 book ai didi

java - Hibernate-Search @IndexedEmbedded with HashMap,如何在索引中包含键集

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:47 25 4
gpt4 key购买 nike

我正在尝试将 Hibernate Search 集成到应用程序中。应用程序实体可以具有多个以多种语言存储的属性。这是通过将非多语言和多语言属性拆分为单独的实体来实现的。此拆分的示例片段如下所示(由于数据库部分工作正常,因此省略了 hibernate 注释):

@Indexed
public class Assignment {

@DocumentId
private UUID id;

@IndexedEmbedded
private Map<String, AssignmentI18n> i18n;

// Other properties
}

public class AssignmentI18n {

@DocumentId
@FieldBridge(impl = AssignmentI18nBridge.class)
private AssignmentI18nId id;

@Field
private String title;

@Field
private String description;

@Field
private String requirements;

public static class AssignmentI18nId {

private UUID assignmentId;

private String iso;
}
}

现在我想通过将数据视为索引中的单个实体来使用 Hibernate Search 来搜索该数据。然而,注释的设置方式会发生这种情况,但是多语言字段的所有条目都存储在索引中的同一字段中。基本上我的索引结构如下所示:

id
i18n.title
i18n.description
i18n.requirements

由于多语言数据的所有值都在同一字段中索引,我无法再区分它们属于哪种语言。有没有办法让索引看起来更像这样?:

id
i18n.nl.title
i18n.en.title
i18n.nl.description
i18n.en.description
i18n.nl.requirements
i18n.en.requirements

基本上我想将 HashMap 键值添加到索引字段名称中。我研究了将 map 视为具有自定义 FieldBridge 的字段的可能性,但这似乎不是正确的方法。

最佳答案

如果您想让索引字段看起来像您所描述的那样,请使用自定义字段桥。这就是获取此结构的方式,但由于您的映射值非常复杂,因此需要大量自定义代码来创建所有字段。

您可以为 Hibernate Search here 创建功能请求。我可以想象这种类型的功能将具有普遍用途。基本上是通过 @IndexedEmbedded 选项或通过附加注释定义映射键如何成为 Lucene 字段名称的一部分的方法。也就是说,您是否想过如何在该索引中进行搜索?用户是否以某种方式指定区域设置,并且根据该区域设置,您将定位适当的字段?另外,您如何处理根据语言类型配置不同词干分析器的方法?

关于java - Hibernate-Search @IndexedEmbedded with HashMap,如何在索引中包含键集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com