2017-03-01 3 views
0

Ich versuche, diese Abfrage mit Hibernate Search zu erstellen, konnte ich nicht erfolgreich sein.Wie verwende ich BooleanJunction mit Hibernate Search

Select * from message where (sender.id = "1" AND message.status = "sent") OR (recipient.id = "1" AND message.status = "new") OR (recipient.id = "1" AND message.status = "seen") 

Wie kann ich es mit Lucene tun?

Ich steckte hier

FullTextSession fullTextSession = Search.getFullTextSession(getSessionFactory().getCurrentSession()); 
    QueryBuilder qb = fullTextSession.getSearchFactory() 
      .buildQueryBuilder().forEntity(getPersistentClass()).get(); 

    BooleanQuery bquery = new BooleanQuery(); 

    Query q1 = qb.keyword().onField("sender.id").matching(user.getId()).createQuery(); 
    Query q2 = qb.keyword().onField("status").matching(Message.Status.SENT).createQuery(); 
    BooleanJunction must1 = qb.bool(); 
    must1.must(q1); 
    must1.must(q2); 

    Query q3 = qb.keyword().onField("recipient.id").matching(user.getId()).createQuery(); 
    Query q4 = qb.keyword().onField("status").matching(Message.Status.NEW).createQuery(); 

    BooleanJunction must2 = qb.bool(); 
    must2.must(q3); 
    must2.must(q4); 

    Query q5 = qb.keyword().onField("recipient.id").matching(user.getId()).createQuery(); 
    Query q6 = qb.keyword().onField("status").matching(Message.Status.SEEN).createQuery(); 

    BooleanJunction must3 = qb.bool(); 
    must3.must(q5); 
    must3.must(q6); 

Jede Hilfe?

Antwort

0
Query query = qb.bool() 
    .should(must1.createQuery()) 
    .should(must2.createQuery()) 
    .should(must3.createQuery()) 
    .createQuery(); 
+0

danke es funktionierte – devrim

Verwandte Themen