gpt4 book ai didi

java - 使用 Hibernate Search 的空间查询始终返回空结果集

转载 作者:行者123 更新时间:2023-12-02 04:58:09 25 4
gpt4 key购买 nike

我在使用 hibernate 搜索 (5.0.1) 对 mySQL 数据库 (5.6) 进行空间搜索时遇到问题。

问题确实是查询没有返回任何内容,我相信我已经遵循了 documentation accurately并对 JPA 进行了适当的更改。

经度和纬度数据在数据库中正确为 DOUBLE 类型,并且查询参数应返回大量对象。我完全不知道问题是什么,可能我在某个地方错过了一个简单的步骤

这是查询代码...

public List<Dealership>  getAllDealershipsAroundApplicant(  double centerLatitude, double centerLongitude) {

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em) ;

QueryBuilder builder = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity( Dealership.class ).get();

org.apache.lucene.search.Query luceneQuery = builder.spatial()
.onDefaultCoordinates()
.within( 10000, Unit.KM )
.ofLatitude( 51d ) // HARD CODE
.andLongitude( 0 )
.createQuery();

FullTextQuery hibQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, Dealership.class);

List<Dealership> results = (List<Dealership> )hibQuery.getResultList();

System.out.println( "results: " + results ) ;

return results;
}

以及索引对象...(每个类继承的表,以及父类(super class)中的 ID)

@Spatial(spatialMode = SpatialMode.RANGE)
@Indexed
@Entity
@Audited(targetAuditMode=RelationTargetAuditMode.AUDITED)
@Table(name = "car_dealership")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Dealership extends CarDBEntity {


@Latitude
@Column(name = "latitude")
private Double latitude ;

@Longitude
@Column(name = "longitude")
private Double longitude ;


public Double getLatitude() {
return latitude;
}

public void setLatitude(Double latitude) {
this.latitude = latitude;
}

public Double getLongitude() {
return longitude;
}

public void setLongitude(Double longitude) {
this.longitude = longitude;
}
...

除了编写这些代码部分之外,我没有对数据库进行任何其他更改,也没有向 hibernate/spring(4.1.1) 应用程序添加任何额外的配置。

如有任何指点,我们将不胜感激。谢谢

最佳答案

在现有应用程序中引入 Hibernate Search 时,或者仅在现有数据库中引入 Hibernate Search 时,您需要重建 Lucene 索引。

重建索引意味着 Hibernate 需要从数据库加载所有索引实体(以及可能的索引关系),因此这可能需要一段时间。

最有效的方法是使用 Hibernate Search 中包含的实用程序,称为 MassIndexer:

fullTextSession.createIndexer().startAndWait();

此方法将使用高效的仅向前滚动方法,并使用一些并发操作来使用所有 CPU 进行索引。值得一读MassIndexer reference documentation了解其调整选项。

如果更改索引属性或索引选项,您可能还需要重建索引。

关于java - 使用 Hibernate Search 的空间查询始终返回空结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28561385/

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