我有以下的文档结构复杂的过滤器:ElasticSearch:通过嵌套文件
{
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个条件(单件物品应符合两个条件):文章.some_param = 10,articles.clients.client_id = 10001
所以我需要得到唯一的产品ID为2
我现在使用此查询,这是不正确的(我知道为什么),因为它提取这两个文件:
{
"query": {
"bool": {
"filter": [
{
"term": {
"articles.clients.id": 10001
}
},
{
"terms": {
"articles.some_param": 10
}
}
]
}
}
}
我如何写查询它得到只有具有至少1条它匹配两个条件产品:articles.some_param = 10,articles.clients.client_id = 10001
例如,仅使用ID 2产品?
您需要嵌套类型以使其按照您的方式工作。 https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html – khachik
它们已经设置为嵌套类型。我相信这个问题与嵌套类型无关。上面的查询的行为应该是,但它不符合我的要求。 “获得至少有1条符合两个条件的商品:articles.some_param = 10 AND articles.clients.client_id = 10001”) – Teimuraz