我有以下文档结构:
{
product_name: "Product1",
product_id: 1,
...,
articles: [
{
article_name: 'Article 101',
id: 101,
some_param: 10,
clients: []
},
{
article_name: 'Article 102',
id: 102,
some_param: 11,
clients: [
{
client_id: 10001,
client_name: "some client 1001"
}
...
]
}
]
},
{
product_name: "Product2",
product_id: 2,
...,
articles: [
{
article_name: 'Article 101',
id: 101,
some_param: 10,
clients: []
},
{
article_name: 'Article 102',
id: 102,
some_param: 10,
clients: [
{
client_id: 10001,
client_name: "some client 1001"
}
...
]
}
]
}
我需要获取文件(产品),如果它的某些文章符合2个条件(单篇文章应该符合这两个条件):articles.some_param = 10 AND articles.clients.client_id = 10001
所以我只需要获得id为2的产品。
我现在正在使用此查询,这是不正确的(我知道原因),因为它会获取这两个文档:
{
"query": {
"bool": {
"filter": [
{
"term": {
"articles.clients.id": 10001
}
},
{
"terms": {
"articles.some_param": 10
}
}
]
}
}
}
如何编写只有 产品的查询,其中至少有一篇文章符合这两个条件:articles.some_param = 10 AND articles.clients.client_id = 10001
例如,仅获取ID为2的产品?
答案 0 :(得分:1)
这样的事情:
{
"query": {
"nested": {
"path": "articles",
"query": {
"bool": {
"must": [
{
"term": {
"articles.some_param": {
"value": 10
}
}
},
{
"nested": {
"path": "articles.clients",
"query": {
"term": {
"articles.clients.id":{
"value": 10001
}
}
}
}
}
]
}
}
}
}
}
更新: 尝试将第二个查询包装为bool。
{
"query": {
"nested": {
"path": "articles",
"query": {
"bool": {
"must": [
{
"term": {
"articles.some_param": {
"value": 10
}
}
},
{
"bool":{
"must" : [
{
"nested": {
"path": "articles.clients",
"query": {
"term": {
"articles.clients.id":{
"value": 10001
}
}
}
}
}
]
}
}
]
}
}
}
}
}
P.S。我可能会错误地使用第二个嵌套查询上的路径。只是无法检查。因此,您可以在第二个查询中使用路径。
p.p.s。过滤器不是您需要的查询。它不计算分数