Hibernate 搜索:空间+小于条件
Hibernate search: spatial+less than condition
我想为休眠搜索空间查询添加一些条件。我有一个具有纬度和经度的 class 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
。
我想为休眠搜索空间查询添加一些条件。我有一个具有纬度和经度的 class 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
。