首页 > 解决方案 > Jhipster 自定义弹性搜索映射

问题描述

我正在寻找有关 Jhipster 如何为弹性搜索创建映射的信息。我还想将此映射自定义为两个实体之间关系的默认映射,没有将其类型指定为父或子甚至嵌套。这限制了我如何使用弹性搜索。

例如,我有两个使用以下 jdl 生成的实体:

entity Event {
    title String required minlength(1) maxlength(30)
    startDate ZonedDateTime required,
    endDate ZonedDateTime required

}

entity CustomData{
    name String required minlength(1) maxlength(30),
    value String required,
    filterable Boolean required     
}

 relationship OneToMany{
    Event{aEvent} to CustomData{Event(id)}
 }

默认情况下,此关系不会保存到搜索存储库,并且仅允许带有 CustomData 的“子”对象的事件作为对象数组附加。

这是一个外观示例:

{
        "id": 28152,
        "title": "testWed123",
        "startDate": "2019-02-13T10:53:00.798Z",
        "endDate": "2019-02-13T10:53:00.798Z",
        "customData": [
            {
                "id": 28202,
                "name": "customData1",
                "value": "customDataValue1",
                "filterable": false,
                "event": null
            },
            {
                "id": 28203,
                "name": "customData1",
                "value": "customDataValue2",
                "filterable": true,
                "event": null
            }
        ]
    }

以下是我如何将这些事件保存到 elasticsearch 存储库:

event.addCustomData(customData1);
eventSearchRepository.save(event);

标签: javaelasticsearchjhipster

解决方案


我没有找到使用自定义映射的方法,但是我确实找到了如何使用自动映射来实现上述功能,只需在父类中使用下面的注释来描述关系。

    @Field(type = FieldType.Nested, includeInParent = true)
    @OneToMany(mappedBy = "event", fetch = FetchType.EAGER, targetEntity = CustomData.class)
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<CustomData> customData = new HashSet<>();

如果您在索引中放置了任何文档,请使用不同的索引名称,因为它不会生成具有上述信息的新映射。


推荐阅读