summaryrefslogtreecommitdiff
path: root/vendor/ruflin/elastica/test/lib/Elastica/Test/Query/BoostingTest.php
blob: 8133fd373114e9b37ff50c43d2d57ea26db7ff03 (plain)
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']);
    }
}