0
我有一个在不同地理位置出售的车辆索引,我期待找到所有不同的制造商与他们有可用的汽车数量在特定位置和特定价格下的半径。休眠搜索空间方面查询工作5次,然后只返回第5个结果
我已经写了查询代码,似乎完美的前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>
感谢您的阅读
非常感谢,上升到5.7.1解决了这个问题,所以它看起来很可能是该问题的结果。我愚蠢地打折版本,因为我认为这个问题将与我同在。干杯。 – hairyCrazyMan