1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
<?php
namespace Elastica\Test\Filter;
use Elastica\Document;
use Elastica\Filter\Nested;
use Elastica\Filter\Terms;
use Elastica\Search;
use Elastica\Test\Base as BaseTest;
use Elastica\Type\Mapping;
class NestedFilterWithSetFilterTest extends BaseTest
{
protected function _getIndexForTest()
{
$index = $this->_createIndex();
$type = $index->getType('user');
$type->setMapping(new Mapping(null, array(
'firstname' => array('type' => 'string', 'store' => 'yes'),
// default is store => no expected
'lastname' => array('type' => 'string'),
'hobbies' => array(
'type' => 'nested',
'include_in_parent' => true,
'properties' => array('hobby' => array('type' => 'string')),
),
)));
$type->addDocuments(array(
new Document(1, array(
'firstname' => 'Nicolas',
'lastname' => 'Ruflin',
'hobbies' => array(
array('hobby' => 'opensource'),
),
)),
new Document(2, array(
'firstname' => 'Nicolas',
'lastname' => 'Ippolito',
'hobbies' => array(
array('hobby' => 'opensource'),
array('hobby' => 'guitar'),
),
)),
));
$index->refresh();
return $index;
}
/**
* @group unit
*/
public function testToArray()
{
$filter = new Nested();
$this->assertEquals(array('nested' => array()), $filter->toArray());
$query = new Terms();
$query->setTerms('hobby', array('guitar'));
$filter->setPath('hobbies');
$filter->setFilter($query);
$expectedArray = array(
'nested' => array(
'path' => 'hobbies',
'filter' => array('terms' => array(
'hobby' => array('guitar'),
)),
),
);
$this->assertEquals($expectedArray, $filter->toArray());
}
/**
* @group functional
*/
public function testShouldReturnTheRightNumberOfResult()
{
$filter = new Nested();
$this->assertEquals(array('nested' => array()), $filter->toArray());
$query = new Terms();
$query->setTerms('hobby', array('guitar'));
$filter->setPath('hobbies');
$filter->setFilter($query);
$client = $this->_getClient();
$search = new Search($client);
$index = $this->_getIndexForTest();
$search->addIndex($index);
$resultSet = $search->search($filter);
$this->assertEquals(1, $resultSet->getTotalHits());
$filter = new Nested();
$this->assertEquals(array('nested' => array()), $filter->toArray());
$query = new Terms();
$query->setTerms('hobby', array('opensource'));
$filter->setPath('hobbies');
$filter->setFilter($query);
$client = $this->_getClient();
$search = new Search($client);
$index = $this->_getIndexForTest();
$search->addIndex($index);
$resultSet = $search->search($filter);
$this->assertEquals(2, $resultSet->getTotalHits());
}
}
|