Hibernate Search 空间构面查询先工作 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>

谢谢阅读

罗迪埃

这只是一个猜测,但您可能会遇到HSEARCH-2691该错误已在 Hibernate Search 版本中修复5.7.1.Final也许你可以试试那个版本?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 Hibernate HQL 5 添加两个计数查询的结果

来自分类Dev

返回查询结果中前5个值的AVG

来自分类Dev

knp分页器返回0个结果,但查询返回5个结果

来自分类Dev

Hibernate Search 5中的访问目录

来自分类Dev

Hibernate 5 ORM的空间谓词

来自分类Dev

MYSQL SELECT 最后 5 个结果,然后按日期对这 5 个结果进行排序?

来自分类Dev

Hibernate 5返回一个可管理的对象

来自分类Dev

Hibernate Search - 在查询上应用 facet 不会返回任何结果

来自分类Dev

需要在 ssis 中使用从其他查询返回 5 个随机行结果的查询

来自分类Dev

一次只在搜索栏中显示5个结果

来自分类Dev

Hibernate Search返回空结果列表

来自分类Dev

Hibernate Search不返回任何结果

来自分类Dev

Google Places API仅返回5个结果

来自分类Dev

Google Places API仅返回5个结果

来自分类Dev

使用slice()仅返回前5个结果

来自分类Dev

Laravel 5范围仅返回一个结果

来自分类Dev

SOLR-查询构面,每个构面返回N个结果

来自分类Dev

SOLR-查询构面,每个构面返回N个结果

来自分类Dev

mysql获得第4,第5,第6,第7个结果

来自分类Dev

拉杆5次,在拉杆的第5次拉动时您将获得第3个绿灯

来自分类Dev

Hibernate 5 中的 StatelessSessionImpl

来自分类Dev

Hibernate 5,条件查询条件子句具有2个限制

来自分类Dev

在Google上打开前5个结果

来自分类Dev

mysql如何缩短5个结果

来自分类Dev

Spring 5 + Hibernate 5 集成 UnsatisfiedDependencyException Hproblem

来自分类Dev

Angular 5 viewchild 只工作一次

来自分类Dev

Hibernate Search查询类

来自分类Dev

Hibernate Search查询类

来自分类Dev

YouTube数据API一次仅显示5个结果?

Related 相关文章

热门标签

归档