2

私はこのような 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

これが多くのドキュメントの 1 つに過ぎないと仮定すると、次のように検索できます。

  1. 名前が an で始まり、男の子がいる人物を検索する

    $/person/name:an* AND $/person/children/sex:male
    
  2. 男児と女児がいる人を探す

    $/person/children/sex:male AND $/person/children/sex:female
    

このように特定の名前と性別の子を見つけようとすると困ってしまいます

$/person/children/sex:male AND $/person/children/name:leia

これにより結果が返され、その理由がわかります。これで結果が返されないようにしたいと思います。私の質問は、これらのネストされたプロパティを識別または関連付けて、クエリが有効なデータを返すようにするにはどうすればよいですか?

私は考えました:

  1. 子を別々のドキュメントとして保存しますが、これを行うと、上で書いた方法で検索する能力が失われます。

  2. クエリで何らかのフィールドを使用して、idこれらのフィールドをグループ化します。私は「正しい」方法を思いつくことができませんでした。私が検討したバリアント:

    $/person/children/1/name:luke
    $/person/children/name:luke1 or $/person/children/name:1luke
    
4

1 に答える 1