2016-09-16 51 views
1

这里项给出的结果,如果所有参数的个数一个(1,2)的比赛,我需要所有ARGS必须在用户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); 
+0

你需要degree.name同时具有BCA和MCA的结果? – blackmamba

+0

是的,我想知道,但明智的 –

+0

它仍然不清楚,什么样的智慧?举一个例子 – blackmamba

回答

1

你与你的setTerms实际上是一个ORdegrees领域取得什么。

要使一个AND查询,我建议使用Elastica\Query\BoolQuery类如下:

$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); 
+0

谢谢回答... –