gpt4 book ai didi

elasticsearch - 在ElasticSearch中的同一嵌套文档上匹配多个属性

转载 作者:行者123 更新时间:2023-12-02 22:22:47 25 4
gpt4 key购买 nike

我正在尝试完成对ElasticSearch中嵌套文档的 bool(boolean) AND的理解。假设我有以下两个文档。

{
"id": 1,
"secondLevels": [
{
"thirdLevels": [
{
"isActive": true,
"user": "anotheruser@domain.com"
}
]
},
{
"thirdLevels": [
{
"isActive": false,
"user": "user@domain.com"
}
]
}
]
}
{
"id": 2,
"secondLevels": [
{
"thirdLevels": [
{
"isActive": true,
"user": "user@domain.com"
}
]
}
]
}

在这种情况下,我只想匹配同时嵌套了 isActive: trueuser: user@domain.com的嵌套文档的文档(在本例中为ID:2)。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "secondLevels.thirdLevels",
"query": {
"bool": {
"must": [
{
"term": {
"secondLevels.thirdLevels.isActive": true
}
},
{
"term": {
"secondLevels.thirdLevels.user": "user@domain.com"
}
}
]
}
}
}
}
]
}
}
}

但是,似乎正在发生的事情是我的查询打开了两个文档,因为第一个文档的一个 thirdLevel具有 isActive: true,而另一个 thirdLevel具有适当的用户。

有什么方法可以在查询/过滤时严格执行此操作,还是必须在脚本中执行此操作?

最佳答案

使用嵌套对象和嵌套查询,您已经完成了大部分工作。

您现在要做的就是添加inner hits标志,并使用source filtering将整个secondLevels文档移开:

{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "secondLevels.thirdLevels",
"query": {
"bool": {
"must": [
{
"term": {
"secondLevels.thirdLevels.isActive": true
}
},
{
"term": {
"secondLevels.thirdLevels.user": "user@domain.com"
}
}
]
}
},
"inner_hits": {
"size": 100
}
}
}
]
}
}
}

关于elasticsearch - 在ElasticSearch中的同一嵌套文档上匹配多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46437137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com