我有一个Elastic索引,它包含的对象结构如下:
{
dogs: [
{
name: 'wiener dog',
id: 2,
cats: [
{
name: 'mean cat',
id: 5,
},
...
],
},
...
],
...
}
**我的问题是:**如何根据此索引搜索在cats
中包含特定id
的所有文档?单个匹配项即可。
**我尝试过的方法:**我尝试过许多不同的查询,包括嵌套在dogs
上,以及嵌套在dogs
和cats
上。我尝试过直接通过dogs.cats.id
访问属性,以及上述方法的所有组合。下面是NEST中的一个示例:
query &= mst.Nested(n => n
.Path("dogs")
.Query(q => q
.Nested(n => n
.Path("dogs.cats")
.Query(q => q
.Terms(t => t
.Field("dogs.cats.id")
.Terms(catIds.ToList())
)
)
)
)
);
我也试过用一个单一的Nested
与Field
设置为cats.id
没有运气。
如果您能在这里提供任何帮助,我们将不胜感激。此时更改数据结构将是一项非常大的工作,如果可能的话,我们将尽量避免。谢谢!
1条答案
按热度按时间xbp102n01#
根据您提供的信息,我认为使用**NestedQuery**是理想的选择。