【发布时间】:2021-02-26 20:31:56
【问题描述】:
我的 ES 索引中存在的数据示例:
{
"entities" : [
{
"fieldName" : "abc"
},
{
"fieldName" : "def"
}
],
"entities" : [
{
"fieldName" : "abc"
},
{
"fieldName" : "def"
}
],
"entities" : [
{
"fieldName" : "abc"
},
{
"fieldName" : "def"
},
{
"fieldName" : "gh"
}
]
}
我只想找到那些 fieldName 只匹配“abc”和“def”的文档,所以我尝试了 ES 的嵌套匹配查询,但问题是它也匹配除了“abc”之外还有额外字段的文档" 和 "定义"。
GET fetch_latest_version/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "entities",
"query": {
"bool": {
"must": [
{
"match": {
"entities.fieldName": "abc"
}
}
]
}
}
}
},
{
"nested": {
"path": "entities",
"query": {
"bool": {
"must": [
{
"match": {
"entities.fieldName": "def"
}
}
]
}
}
}
}
]
}
}
上述查询的结果是它将列出样本数据中存在的所有 3 个文档。我只希望它只匹配第一个和第二个文档(如完全匹配),其中实体列表只有“abc”和“def”字段。我不应该匹配 fieldName 所在的第三个文档 ("abc","def","gh") 。
【问题讨论】:
标签: python-3.x elasticsearch elasticsearch-dsl-py