我想为hibernate搜索空间查询添加一些条件。我有一个类别Store
,它有纬度和经度。它还具有价格属性。我想找到一个特定地点周围的所有商店,价格低于给定的投入。这就是我当前代码的样子:
Session session = getSession(); //getting org.hibernate.Session
FullTextSession fullTextSession = Search.getFullTextSession(session);
QueryBuilder builder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Store.class).get();
org.apache.lucene.search.Query luceneQuery = builder.spatial().onDefaultCoordinates().within(radius.doubleValue(), Unit.KM).ofLatitude(lat.doubleValue())
.andLongitude(lon.doubleValue()).createQuery();
Query hibQuery = fullTextSession.createFullTextQuery(luceneQuery, Store.class);
@SuppressWarnings("unchecked")
List<Menu> menus = (List<Menu>) hibQuery.list();
我想在小于条件的情况下添加一个条件。我可以向其中添加hibQuery.setParameter("property", "value");
。但我无法添加小于的之类的条件。关于我该怎么做,有什么建议吗?
您需要在价格字段上创建一个范围查询,如下所示:
Query priceQuery = builder.range().onField("price").below(maxPrice)
.createQuery();
然后,您将希望使用布尔查询来组合两个查询,如下所示:
Query mainQuery = builder.bool().must(luceneQuery).must(priceQuery)
.createQuery();
您可以使用此查询来查找结果。
请注意,为了有效地执行范围查询,您需要确保price
字段带有@NumericField
和@Field
注释。