Jhipster自定义Elasticsearch映射

时间:2019-02-13 13:43:06

标签: java elasticsearch jhipster

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

例如,我有两个使用以下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);

1 个答案:

答案 0 :(得分:0)

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

    @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<>();

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