Ich habe die Hibernate-Suche mit Apache Lucene konfiguriert, um nach gegebenen Koordinaten leichter suchen zu können. Jetzt frage ich mich, wie ich weitere Kriterien hinzufügen kann, um Entitäten zu suchen. Ich benutze auch Spring Data Projekt und Query DSL. Ich versuche, die Klasse Predicate
von QueryDSL zu verwenden, um meine App konsistent zu halten. Es gibt eine Möglichkeit, dies zu tun?Kombination von QueryDSL mit Hibernate-Suche und Lucene
Mein 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;
//...
}
Mein Repository Klasse
@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();
}
Ich suchte nach Möglichkeit, Lucene-Abfrage mit meinen eigenen SQL-Abfragen/Kriterien zu kombinieren, weil ich mehr Selbstvertrauen mit SQL als Lucene fühle, aber danke. Ich habe getan was ich will und es funktioniert hervorragend. –