0

我正在使用弹性搜索和休眠搜索。我有一个要求,我必须在 kibana 中构建图块地图。为此,我需要具有纬度和经度值的 geo_point 数据。我在休眠中发现我们有 @spatial 注释来执行此操作,但是当我使用时,我遇到了异常。

java.lang.NullPointerException at org.hibernate.search.engine.metadata.impl.TypeMetadata$Builder.getAnalyzerReference(TypeMetadata.java:631)

我有两个模型实体,我在下面写它。我正在使用休眠搜索 5.7.0.Final。

@Entity
@Table(name = "actors", catalog = "twitter")
public class Actors implements java.io.Serializable {
    Set<ActorsLocation> actorsLocation;
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "actors")
    @Cascade(CascadeType.SAVE_UPDATE)
    @IndexedEmbedded
    public Set<ActorsLocation> getActorsLocation() {
        return actorsLocation;
    }
    public void setActorsLocation(Set<ActorsLocation> actorsLocation) {
        this.actorsLocation = actorsLocation;
    }
}
@Entity
@Spatial
@Table(name = "actors_location", catalog = "twitter")
public class ActorsLocation implements java.io.Serializable {
    private static final long serialVersionUID = 3585685166633868737L;
    Long id;
    @Id
    @Column(name = "id",nullable = false)
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    @Latitude
    @Field
    Double lat;
    @Longitude
    @Field
    Double lon;
    @ContainedIn
    Actors actors;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", nullable = false)  
    public Actors getActors() {
        return actors;
    }
    public void setActors(Actors actors) {
        this.actors = actors;
    }
}

任何建议如何解决它?

4

1 回答 1

0

正如我在评论中提到的,NPE 是一个错误: https ://hibernate.atlassian.net/browse/HSEARCH-2858

我们应该很快修复它,但是即使上面的错误得到修复,另一个错误仍然会保留并阻止您存储多值位置(单​​个“Actor”的多个“ActorLocations”):https://hibernate.atlassian .net/browse/HSEARCH-2859。不幸的是,该错误更难修复,我们可能需要等待主要版本。

解决这两个问题的一种方法是反向索引嵌入:将演员嵌入到您的 ActorLocations 中,而不是相反。然后,针对 ActorLocations 而不是针对 Actor 执行所有搜索查询。我知道,这不是一个理想的解决方案,但它应该可以工作。

于 2017-08-22T16:12:02.233 回答