【发布时间】:2016-06-30 17:20:40
【问题描述】:
我使用 Apache Lucene 配置了 Hibernate Search,以便通过给定坐标更轻松地搜索实体。现在我想知道如何向搜索实体添加更多条件。我也在使用 Spring Data 项目和 Query DSL。我正在尝试使用 QueryDSL 中的 Predicate 类来保持我的应用程序的一致性。有没有可能做到这一点?
My Place.class
@Getter
@Setter
@Entity
@Indexed
@Spatial
public class Place implements Serializable {
private static final long serialVersionUID = -8379536848917838560L;
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "place_id")
private Long id;
//...
@Longitude
private Double lng;
@Latitude
private Double lat;
//...
}
我的仓库类
@PersistenceContext(type = PersistenceContextType.EXTENDED)
EntityManager em;
@Override
@Transactional
public List findAll(Coordinates coordinates, Predicate predicate, Pageable pageable, int maxDistance) {
FullTextEntityManager fullTextSession = Search.getFullTextEntityManager(em);
QueryBuilder builder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Place.class).get();
org.apache.lucene.search.Query luceneQuery = builder
.spatial()
.within(maxDistance, Unit.KM)
.ofCoordinates(coordinates)
.createQuery();
FullTextQuery jpaQuery = fullTextSession.createFullTextQuery(luceneQuery, Place.class);
return jpaQuery.getResultList();
}
【问题讨论】:
标签: hibernate lucene querydsl hibernate-search