![](/img/trans.png)
[英]Spatial query using Hibernate Search always returns an empty result set
[英]Hibernate Search spatial facet query works first 5 times then only returns the 5th result
我有一个在不同地理位置出售的汽车的索引,我正在寻找所有不同的制造商,这些制造商提供了在特定位置和特定价格范围内可提供的汽车数量。
我已经编写了查询代码,该代码似乎对前5次尝试都非常有效,然后结果似乎“粘在”第5个查询的纬度,经度和半径上。 更改价格元素会更改结果,但只能更改第5个查询的位置和半径。
我不确定是否必须“刷新”任何内容,或者这是配置问题,但是奇怪的是,查询仅在5次尝试后就停止工作。 我感到困惑,无法找到在线复制的问题,因此将不胜感激任何帮助或见解。
这是查询...
private List<VehicleManufacturer> getManufacturers( double valuation , double latitude , double longitude, int radius ) throws Exception {
long startTIme = new Date().getTime() ;
List<VehicleManufacturer> returnedManufacturers = new ArrayList<VehicleManufacturer> () ;
FullTextEntityManager manufacturerFullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
QueryBuilder manufacturerBuilder = manufacturerFullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(AvailableVehicle.class).get() ;
// CREATE SPATIAL AND TOP PRICE FULL TEXT QUERY
org.apache.lucene.search.Query manufacturingSpatialQuery = manufacturerBuilder.spatial().within( radius , Unit.KM ).ofLatitude( latitude ).andLongitude( longitude ).createQuery();
org.apache.lucene.search.Query manufacturingValuationRoof = NumericRangeQuery.newDoubleRange("valuation", 0d , valuation , true, true);
org.apache.lucene.search.Query manufacturingValuationAndSpatialQuery = manufacturerBuilder.bool().must(manufacturingValuationRoof).must(manufacturingSpatialQuery).createQuery() ;
FullTextQuery manufacturingFullTextQuery = manufacturerFullTextEntityManager.createFullTextQuery(manufacturingValuationAndSpatialQuery, AvailableVehicle.class);
// FACET REQUEST
FacetingRequest manufacturingFacetingRequest = manufacturerBuilder.facet().name( "manufacturerFaceting" ).onField("manufacturer").discrete().orderedBy( FacetSortOrder.FIELD_VALUE ).includeZeroCounts(false).createFacetingRequest();
FacetManager facetManager = manufacturingFullTextQuery.getFacetManager();
facetManager.enableFaceting(manufacturingFacetingRequest);
List<Facet> facets = facetManager.getFacets( "manufacturerFaceting" );
for (Facet manuacturingFacet : facets) {
VehicleManufacturer manufacturer = new VehicleManufacturer( manuacturingFacet.getValue() , manuacturingFacet.getCount() ) ;
returnedManufacturers.add( manufacturer ) ;
}
System.out.println( "MANUFACTURERS count: " + returnedManufacturers.size() + " time: " + ( new Date().getTime() - startTIme ) + "ms latitude:" + latitude + " longitude: " + longitude + " radius: " + radius ) ;
return returnedManufacturers ;
}
...这是节略的索引对象类...
@Entity
@Indexed( index="AvailableVehicle" )
@Spatial(spatialMode = SpatialMode.RANGE )
@Table(name = "car_available_vehicle")
public class AvailableVehicle implements Coordinates {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID" )
private int id ;
@OneToOne()
@JoinColumn( name="VEHICLE_ID" )
private Vehicle vehicle ;
@Facet()
@Column(name = "MANUFACTURER" )
@Field(index=Index.YES, analyze=Analyze.NO, store=Store.NO)
private String manufacturer ;
@Facet()
@Column(name = "MODEL" )
@Field(index=Index.YES, analyze=Analyze.NO, store=Store.NO)
private String model ;
@Column(name = "LONGITUDE" )
private Double longitude ;
@Column(name = "LATITUDE" )
private Double latitude ;
@Column(name = "PRICE" )
@Field(index=Index.YES, analyze=Analyze.NO, store=Store.NO)
@NumericField( forField="price" )
private double price ;
@Column(name = "VALUATION" )
@Field(index=Index.YES, analyze=Analyze.NO, store=Store.NO)
@NumericField( forField="valuation" )
private double valuation ;
..这是休眠的Maven依赖项...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.9.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>5.7.0.Final</version>
</dependency>
谢谢阅读
只是一个猜测,但是您可能会遇到HSEARCH-2691 。 该错误已在Hibernate Search版本5.7.1.Final
。 也许您可以尝试该版本?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.