我想通过ES发出AND
请求,因此我在must
中的各个词条之间插入了tags.id
(对于boolQuery
),但这不起作用...我收到了元素,但像OR
{
"query": {
"bool": {
"must": [
{
"terms": {
"computerId": [
1
]
}
},
{
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"terms": {
"tags.id": [
1,
2,
3
]
}
}
]
}
}
}
}
]
}
}
}
您应该在布尔查询中使用nested
。
尝试一下:
{
"query": {
"bool": {
"must": [
{
"terms": {
"computerId": [
1
]
}
},
{
"nested": {
"path": "tags",
"query": {
"term": {
"tags.id": {
"value": 1
}
}
}
}
},
{
"nested": {
"path": "tags",
"query": {
"term": {
"tags.id": {
"value": 2
}
}
}
}
},
{
"nested": {
"path": "tags",
"query": {
"term": {
"tags.id": {
"value": 3
}
}
}
}
}
]
}
}
}
术语的行为类似于OR,因此您的查询正在执行AND(1 OR 2 OR 3)。
术语查询返回在提供的字段中包含一个或多个确切术语的文档。
希望这会有所帮助
如何创建带有嵌套的3个查询(对不起,我是贝里初学者):
$boolQuery1->addMust(new Term(['tags.id' => 1]));
$boolQuery2->addMust(new Term(['tags.id' => 2]));
$boolQuery3->addMust(new Term(['tags.id' => 3]));
$tagsQuery1 = new Nested();
$tagsQuery2 = new Nested();
$tagsQuery3 = new Nested();
$tagsQuery1
->setPath('tags')
->setQuery($boolQuery1);
$tagsQuery2
->setPath('tags')
->setQuery($boolQuery2);
$tagsQuery3
->setPath('tags')
->setQuery($boolQuery3);
$query = ?