休眠搜索:空间+小于条件



我想为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注释。

最新更新