2016-09-16 31 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

謝謝回答... –