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

标签 java hibernate hibernate-search

我正在尝试将 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/

相关文章:

hibernate-search - 如何将@FieldBridge 实现到@EmbeddedId 字段

java - 在 Java 中获取字符串的特定部分

java - 了解 Spring 中的 SessionFactory

javax.persistence.version导致实体的Id在事务中保持为空

mysql - 类 'URL' 中没有可写属性 'com.mchange.v2.c3p0.ComboPooledDataSource'

java - 如何将 hibernate-search 与 JBoss datagrid 一起使用?

java - 如何将计算字符串中的文本获取到 TextView 字段?

java - 用户在 aem 中调用 API 时需要输入密码

java - 我的通配符实现有什么问题?

spring - java.lang.ClassCastException : com. sun.proxy.$Proxy62 不能转换为 org.hibernate.engine.spi.SessionImplementor