如何在弹性搜索中匹配数组中传递的所有参数?
how to mast match all args pass in array in elastic search?
如果所有参数 (1,2) 之一匹配并且我需要所有参数都必须在用户 degree.id 中
我这里有这样的数据
"id": 66,
"name": null,
"degrees": [
{
"id": 1,
"name": "BCA",
},{
"id": 2,
"name": "MCA",
}
]
所以我需要,如果 BCA 和 MCA 两个学位都存在,那么只有那些记录会到达结果
$term = new \Elastica\Query\Terms();
$term->setTerms('degrees.id', array('1','2'));
return $boolQuery->addMust($term);
您用 setTerms
制作的实际上是 degrees
字段上的 OR
。
要进行 AND
查询,我建议使用 Elastica\Query\BoolQuery
class,如下所示:
$BCAQuery = new Elastica\Query\Term();
$BCAQuery->setTerm('degree.id', 1);
$MCAQuery = new Elastica\Query\Term();
$MCAQuery->setTerm('degree.id', 2);
$boolQuery = new BoolQuery();
$boolQuery->addMust($BCAQuery);
$boolQuery->addMust($MCAQuery);
请记住,如果 degrees
映射为 nested
以使用带有 Elastica\Query\Nested
的 bool 查询
$degreesQuery = new Elastica\Query\Nested();
$degreeQuery->setPath('degrees');
$degreesQuery->setQuery($boolQuery);
如果所有参数 (1,2) 之一匹配并且我需要所有参数都必须在用户 degree.id 中
我这里有这样的数据
"id": 66,
"name": null,
"degrees": [
{
"id": 1,
"name": "BCA",
},{
"id": 2,
"name": "MCA",
}
]
所以我需要,如果 BCA 和 MCA 两个学位都存在,那么只有那些记录会到达结果
$term = new \Elastica\Query\Terms();
$term->setTerms('degrees.id', array('1','2'));
return $boolQuery->addMust($term);
您用 setTerms
制作的实际上是 degrees
字段上的 OR
。
要进行 AND
查询,我建议使用 Elastica\Query\BoolQuery
class,如下所示:
$BCAQuery = new Elastica\Query\Term();
$BCAQuery->setTerm('degree.id', 1);
$MCAQuery = new Elastica\Query\Term();
$MCAQuery->setTerm('degree.id', 2);
$boolQuery = new BoolQuery();
$boolQuery->addMust($BCAQuery);
$boolQuery->addMust($MCAQuery);
请记住,如果 degrees
映射为 nested
以使用带有 Elastica\Query\Nested
$degreesQuery = new Elastica\Query\Nested();
$degreeQuery->setPath('degrees');
$degreesQuery->setQuery($boolQuery);