我正在尝试使用 Lucene 查询具有以下结构的域
Student 1-------* Attendance *---------1 Course
域中的数据总结如下
Course.name Attendance.mandatory Student.name
-------------------------------------------------
cooking N Bob
art Y Bob
如果我执行查询"courseName:cooking AND mandatory:Y"
,它会返回 Bob,因为 Bob 正在参加烹饪课程,而 Bob 也在参加必修课程。但是,我真正想查询的是“参加强制性烹饪课程的学生”,在这种情况下不会返回任何人。
是否可以将其表述为 Lucene 查询?我实际上使用的是 Compass,而不是直接使用 Lucene,所以我可以使用CompassQueryBuilder或 Lucene 的查询语言。
为了完整起见,域类本身如下所示。这些类是 Grails 域类,但我使用的是标准 Compass 注释和 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
}