lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Donal Murtagh <domur...@yahoo.co.uk>
Subject Querying across object relationships
Date Wed, 29 Jul 2009 20:42:21 GMT
Hi,

I'm trying to use Lucene to query a domain that has the following structure

    Student 1-------* Attendance *---------1 Course

The data in the domain is summarised below

    Course.name   Attendance.mandatory   Student.name
    -------------------------------------------------
    cooking                        N                      Bob
    art                                Y                      Bob

If I execute the query "+courseName:cooking AND +mandatory:Y" 

it
returns Bob, because Bob is attending the cooking course, and Bob is
also attending a mandatory course. However, what I *really* want to
query for is "students attending a mandatory cooking course", which in
this case would return nobody. Is it possible to formulate this as a
Lucene query?

For the sake of completeness, the domain classes
themselves are shown below. These classes are Grails domain classes,
but I'm using the standard Compass annotations and Lucene query syntax.

Thanks!
- Don

    @Searchable
    class Student {
    
        @SearchableProperty(accessor = 'property')
        String name
        
        static hasMany = [attendances: Attendance]
    
        @SearchableId(accessor = 'property')
        Long id
    
        @SearchableComponent
        Set<Attendance> getAttendances() {
            return attendances
        }
    }
    
    @Searchable(root = false)
    class Attendance {
    
        static belongsTo = [student: Student, course: Course]
    
        @SearchableProperty(accessor = 'property')
        String mandatory = "Y"
    
        @SearchableId(accessor = 'property')
        Long id
    
        @SearchableComponent
        Course getCourse() {
            return course
        }
    }
    
    @Searchable(root = false)
    class Course {
    
        @SearchableProperty(accessor = 'property', name = "courseName")
        String name  
    
        @SearchableId(accessor = 'property')
        Long id
    }


      
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message