2017-07-03 37 views
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> 

感谢您的阅读

回答

1

这只是一个猜测,但你可能会击中HSEARCH-2691。这个bug在Hibernate Search版本5.7.1.Final中修复;也许你可以试试这个版本?

+0

非常感谢,上升到5.7.1解决了这个问题,所以它看起来很可能是该问题的结果。我愚蠢地打折版本,因为我认为这个问题将与我同在。干杯。 – hairyCrazyMan