我试图使用Lucene来查询具有以下结构域
Student 1-------* Attendance *---------1 Course
域中的数据总结如下
Course.name Attendance.mandatory Student.name
-------------------------------------------------
cooking N Bob
art Y Bob
如果我执行查询"courseName:cooking AND mandatory:Y"
返回鲍勃,因为鲍勃参加烹饪课程,和Bob也参加必修课程。 不过,我真的想查询是,在这种情况下将返回没人“参加强制性的烹饪课程的学生”。
是否有可能制订这是一个Lucene查询? 我实际使用罗盘,而不是直接的Lucene,所以我可以使用CompassQueryBuilder或Lucene的查询语言。
为了完整起见,域类本身如下所示。 这些类是Grails领域类,但我使用的是标准的指南针注释和Lucene的查询语法。
@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
}