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
|
<?php
namespace Elastica\Test\Filter;
use Elastica\Filter\AbstractGeoShape;
use Elastica\Filter\GeoShapePreIndexed;
use Elastica\Query\MatchAll;
use Elastica\Query\Filtered;
use Elastica\Test\Base as BaseTest;
class GeoShapePreIndexedTest extends BaseTest
{
public function testGeoProvided()
{
$indexName = 'geo_shape_filter_test';
$index = $this->_createIndex($indexName);
$type = $index->getType('type');
$otherType = $index->getType('other_type');
// create mapping
$mapping = new \Elastica\Type\Mapping($type, array(
'location' => array(
'type' => 'geo_shape'
)
));
$type->setMapping($mapping);
// create other type mapping
$otherMapping = new \Elastica\Type\Mapping($type, array(
'location' => array(
'type' => 'geo_shape'
)
));
$otherType->setMapping($otherMapping);
// add type docs
$type->addDocument(new \Elastica\Document('1', array(
'location' => array(
"type" => "envelope",
"coordinates" => array(
array(0.0, 50.0),
array(50.0, 0.0)
)
)
)));
// add other type docs
$otherType->addDocument(new \Elastica\Document('2', array(
'location' => array(
"type" => "envelope",
"coordinates" => array(
array(25.0, 75.0),
array(75.0, 25.0)
)
)
)));
$index->optimize();
$index->refresh();
$gsp = new GeoShapePreIndexed(
'location', '1', 'type', 'elastica_'.$indexName, 'location'
);
$gsp->setRelation(AbstractGeoShape::RELATION_INTERSECT);
$expected = array(
'geo_shape' => array(
'location' => array(
'indexed_shape' => array(
'id' => '1',
'type' => 'type',
'index' => 'elastica_'.$indexName,
'path' => 'location'
),
'relation' => $gsp->getRelation()
)
)
);
$this->assertEquals($expected, $gsp->toArray());
$query = new Filtered(new MatchAll(), $gsp);
$results = $index->getType('type')->search($query);
$this->assertEquals(1, $results->count());
$index->delete();
}
}
|