我有一个这样的 Java 模型(省略了一些字段):
@Searchable(root=true)
class Person {
@SearchableProperty
String sex;
@SearchableProperty
String name;
}
class Parent extends Person {
@SearchableComponent
List<Person> children;
}
该模型为 Anakin 人创建了一个包含以下数据的 lucene 文档:
$/person/sex:male
$/person/name:anakin
$/person/children/sex:male
$/person/children/name:luke
$/person/children/sex:female
$/person/children/name:leia
假设这只是众多文档之一,我可以这样搜索:
查找名字以 an 开头并且有一个男孩的人
$/person/name:an* AND $/person/children/sex:male
查找有男孩和女孩的人
$/person/children/sex:male AND $/person/children/sex:female
当我试图找到一个具有特定姓名和性别的孩子时遇到了麻烦,就像这样
$/person/children/sex:male AND $/person/children/name:leia
这将返回一个结果,我明白为什么。我希望这不返回任何结果。我的问题是如何区分或关联这些嵌套属性,以便我的查询返回有效数据?
我考虑过:
将孩子存储为单独的文档,尽管这样做我失去了以我上面写的方式进行搜索的能力。
在查询中以某种方式使用
id
字段对这些字段进行分组。我一直无法想出一个“正确”的方法。我考虑过的变体:$/person/children/1/name:luke $/person/children/name:luke1 or $/person/children/name:1luke