Lucene Query Syntax

Posted by Don on Stack Overflow See other posts from Stack Overflow or by Don
Published on 2009-07-29T19:11:32Z Indexed on 2010/04/16 10:23 UTC
Read the original article Hit count: 251

Filed under:
|
|

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? I'm actually using Compass, rather than Lucene directly, so I can use either CompassQueryBuilder or Lucene's query language.

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.

@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
}

© Stack Overflow or respective owner

Related posts about lucene

Related posts about query