样本数据
poll_A:
{
popular: [
{ domains: [ "google.com", "etsy.com", "amazon.com" ], rank: 1 },
{ domains: [ "google.com", "amazon.com" ], rank: 2 },
]
}
poll_B:
{
popular: [
{ domains: [ "google.com", "etsy.com", "amazon.com" ], rank: 1 },
{ domains: [ "google.com", "etsy.com", "amazon.com" ], rank: 2 },
]
}
我正在尝试创建一个查询,该查询将检查是否仅在等级1中存在域。下面的查询是我开始使用的内容,因为它看起来是正确的。但是,无论我要针对哪个排名查询,匹配查询似乎都会检查嵌套字段的每个实例。
{
"query": {
"nested": {
"path": "popular",
"query": {
"bool": {
"must": [
{
"match": {
"popular.domains": "etsy.com"
}
},
{
"match": {
"popular.rank": 1
}
}
],
"must_not": [
{
"match": {
"popular.domains": "etsy.com"
}
},
{
"range": {
"popular.rank": {
"gte": 2
}
}
}
]
}
}
}
}
}
基本上,我想检查域是否与排名1匹配,但与其他任何排名都不匹配。
答案 0 :(得分:0)
我最终弄清楚了正确的语法以获取所需的内容。如果对其他人有帮助,这对我有用:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "popular",
"query": {
"bool": {
"must": [
{
"match": {
"popular.Domains": "etsy.com"
}
},
{
"match": {
"popular.Rank": 1
}
}
]
}
}
}
}
],
"must_not": [
{
"nested": {
"path": "popular",
"query": {
"bool": {
"must": [
{
"match": {
"popular.Domains": "etsy.com"
}
},
{
"range": {
"popular.Rank": {
"gte": 2
}
}
}
]
}
}
}
}
]
}
}
}
答案 1 :(得分:0)
按如下所示修改查询:
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "popular",
"query": {
"bool": {
"must": [
{
"match": {
"popular.domains": "etsy.com"
}
},
{
"match": {
"popular.rank": 1
}
}
]
}
}
}
}
],
"must_not": [
{
"nested": {
"path": "popular",
"query": {
"bool": {
"must": [
{
"match": {
"popular.domains": "etsy.com"
}
},
{
"range": {
"popular.rank" :{
"gte": 2
}
}
}
]
}
}
}
}
]
}
}
}
请注意结构,就像我在外部must_not
子句中推送must
的代码一样。
那样,它将帮助您获得所需的解决方案。
希望有帮助!