Hibernate搜索:空间+小于条件

时间:2015-03-04 14:45:59

标签: hibernate lucene hibernate-search

我想为休眠搜索空间查询添加一些标准。我有一个班级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");。但我无法添加小于等条件。有关如何做到这一点的任何指示?

1 个答案:

答案 0 :(得分:2)

您希望在价格字段上创建范围查询,如下所示:

Query priceQuery = builder.range().onField("price").below(maxPrice)
    .createQuery();

然后,您希望使用布尔查询组合您的两个查询,如下所示:

Query mainQuery = builder.bool().must(luceneQuery).must(priceQuery)
    .createQuery();

您可以使用此查询来查找结果。

请注意,为了有效地执行范围查询,您需要确保price字段使用@NumericField@Field进行注释。