Skip to content

Commit

Permalink
Merge master into es-1.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
ruflin committed Jun 11, 2014
2 parents 4d3a7b1 + c622ccf commit d6101ec
Show file tree
Hide file tree
Showing 3 changed files with 147 additions and 1 deletion.
5 changes: 4 additions & 1 deletion changes.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
CHANGES

2014-06-10
- Update travis to elasticsearch 1.2.1, disable Thrift plugin as not compatible
- Update travis to elasticsearch 1.2.1, disable Thrift plugin as not compatible and fix incompatible tests

2014-06-04
- Implement Boosting Query (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html) #625

2014-06-02
- add retry_on_conflict support to bulk #623
Expand Down
44 changes: 44 additions & 0 deletions lib/Elastica/Query/Boosting.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

namespace Elastica\Query;

/**
* Class Boosting
* @package Elastica\Query
* @author Balazs Nadasdi <yitsushi@gmail.com>
* @link http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html
*/
class Boosting extends AbstractQuery
{
const NEGATIVE_BOOST = 0.2;

/**
* Set the positive query for this Boosting Query
* @param AbstractQuery $query
* @return \Elastica\Query\Boosting
*/
public function setPositiveQuery(AbstractQuery $query)
{
return $this->setParam('positive', $query->toArray());
}

/**
* Set the negative query for this Boosting Query
* @param AbstractQuery $query
* @return \Elastica\Query\Boosting
*/
public function setNegativeQuery(AbstractQuery $query)
{
return $this->setParam('negative', $query->toArray());
}

/**
* Set the negative_boost parameter for this Boosting Query
* @param Float $negativeBoost
* @return \Elastica\Query\Boosting
*/
public function setNegativeBoost($negativeBoost)
{
return $this->setParam('negative_boost', (float)$negativeBoost);
}
}
99 changes: 99 additions & 0 deletions test/lib/Elastica/Test/Query/BoostingTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
<?php

namespace Elastica\Test\Query;

use Elastica\Document;
use Elastica\Query\Boosting;
use Elastica\Test\Base as BaseTest;

class BoostingTest extends BaseTest
{
/**
* @var \Elastica\Index
*/
protected $index;

/**
* @var \Elastica\Type
*/
protected $type;

/*
* @var array
*/
protected $sampleData;

protected function setUp()
{
parent::setUp();
$this->index = $this->_createIndex('test_boostingquery');
$this->type = $this->index->getType('test');
$this->type->setMapping(array(
'name' => array('type' => 'string', 'index' => 'analyzed'),
'price' => array('type' => 'float')
));

$this->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)
);

foreach($this->sampleData as $key => $value) {
$this->type->addDocument(new Document($key, $value));
}

$this->index->refresh();
}

protected function tearDown()
{
$this->index->delete();
parent::tearDown();
}

public function testToArray()
{
$keyword = "vital";
$negativeKeyword = "Mercury";

$query = new Boosting();
$positiveQuery = new \Elastica\Query\Term(array('name' => $keyword));
$negativeQuery = new \Elastica\Query\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());
}

public function testNegativeBoost()
{
$keyword = "vital";
$negativeKeyword = "mercury";

$query = new Boosting();
$positiveQuery = new \Elastica\Query\Term(array('name' => $keyword));
$negativeQuery = new \Elastica\Query\Term(array('name' => $negativeKeyword));
$query->setPositiveQuery($positiveQuery);
$query->setNegativeQuery($negativeQuery);
$query->setNegativeBoost(0.2);

$response = $this->type->search($query);
$results = $response->getResults();

$this->assertEquals($response->getTotalHits(), 4);

$lastResult = $results[3]->getData();
$this->assertEquals($lastResult['name'], $this->sampleData[2]['name']);
}
}

0 comments on commit d6101ec

Please sign in to comment.