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
|
<?php
namespace Elastica\Test\Query;
use Elastica\Document;
use Elastica\Query\Boosting;
use Elastica\Query\Term;
use Elastica\Test\Base as BaseTest;
class BoostingTest extends BaseTest
{
/**
* @var array
*/
protected $sampleData = array(
array('name' => 'Vital Lama', 'price' => 5.2),
array('name' => 'Vital Match', 'price' => 2.1),
array('name' => 'Mercury Vital', 'price' => 7.5),
array('name' => 'Fist Mercury', 'price' => 3.8),
array('name' => 'Lama Vital 2nd', 'price' => 3.2),
);
protected function _getTestIndex()
{
$index = $this->_createIndex();
$type = $index->getType('test');
$type->setMapping(array(
'name' => array('type' => 'string', 'index' => 'analyzed'),
'price' => array('type' => 'float'),
));
$docs = array();
foreach ($this->sampleData as $key => $value) {
$docs[] = new Document($key, $value);
}
$type->addDocuments($docs);
$index->refresh();
return $index;
}
/**
* @group unit
*/
public function testToArray()
{
$keyword = 'vital';
$negativeKeyword = 'Mercury';
$query = new Boosting();
$positiveQuery = new Term(array('name' => $keyword));
$negativeQuery = new Term(array('name' => $negativeKeyword));
$query->setPositiveQuery($positiveQuery);
$query->setNegativeQuery($negativeQuery);
$query->setNegativeBoost(0.3);
$expected = array(
'boosting' => array(
'positive' => $positiveQuery->toArray(),
'negative' => $negativeQuery->toArray(),
'negative_boost' => 0.3,
),
);
$this->assertEquals($expected, $query->toArray());
}
/**
* @group functional
*/
public function testNegativeBoost()
{
$keyword = 'vital';
$negativeKeyword = 'mercury';
$query = new Boosting();
$positiveQuery = new Term(array('name' => $keyword));
$negativeQuery = new Term(array('name' => $negativeKeyword));
$query->setPositiveQuery($positiveQuery);
$query->setNegativeQuery($negativeQuery);
$query->setNegativeBoost(0.2);
$response = $this->_getTestIndex()->search($query);
$results = $response->getResults();
$this->assertEquals($response->getTotalHits(), 4);
$lastResult = $results[3]->getData();
$this->assertEquals($lastResult['name'], $this->sampleData[2]['name']);
}
}
|