Commit 5da3959c authored by Bas de Nooijer's avatar Bas de Nooijer

Fixes for issue #81

parent bb517cea
...@@ -180,24 +180,31 @@ class Query extends SelectQuery ...@@ -180,24 +180,31 @@ class Query extends SelectQuery
* The fields to use for similarity. NOTE: if possible, these should have a * The fields to use for similarity. NOTE: if possible, these should have a
* stored TermVector * stored TermVector
* *
* Separate multiple fields with commas. * Separate multiple fields with commas if you use string input.
* *
* @param string $fields * @param string|array $fields
* @return self Provides fluent interface * @return self Provides fluent interface
*/ */
public function setMltFields($fields) public function setMltFields($fields)
{ {
if (is_string($fields)) {
$fields = explode(',', $fields);
$fields = array_map('trim', $fields);
}
return $this->setOption('mltfields', $fields); return $this->setOption('mltfields', $fields);
} }
/** /**
* Get MLT fields option * Get MLT fields option
* *
* @return string|null * @return array
*/ */
public function getMltFields() public function getMltFields()
{ {
return $this->getOption('mltfields'); $value = $this->getOption('mltfields');
if ($value === null) $value = array();
return $value;
} }
/** /**
...@@ -371,24 +378,31 @@ class Query extends SelectQuery ...@@ -371,24 +378,31 @@ class Query extends SelectQuery
* Query fields and their boosts using the same format as that used in * Query fields and their boosts using the same format as that used in
* DisMaxQParserPlugin. These fields must also be specified in fields. * DisMaxQParserPlugin. These fields must also be specified in fields.
* *
* Separate multiple fields with commas. * Separate multiple fields with commas if you use string input.
* *
* @param string $queryFields * @param string|array $queryFields
* @return self Provides fluent interface * @return self Provides fluent interface
*/ */
public function setQueryFields($queryFields) public function setQueryFields($queryFields)
{ {
if (is_string($queryFields)) {
$queryFields = explode(',', $queryFields);
$queryFields = array_map('trim', $queryFields);
}
return $this->setOption('queryfields', $queryFields); return $this->setOption('queryfields', $queryFields);
} }
/** /**
* Get queryfields option * Get queryfields option
* *
* @return string|null * @return array
*/ */
public function getQueryFields() public function getQueryFields()
{ {
return $this->getOption('queryfields'); $value = $this->getOption('queryfields');
if ($value === null) $value = array();
return $value;
} }
} }
...@@ -64,7 +64,7 @@ class RequestBuilder extends SelectRequestBuilder ...@@ -64,7 +64,7 @@ class RequestBuilder extends SelectRequestBuilder
$request->addParam('mlt.interestingTerms', $query->getInterestingTerms()); $request->addParam('mlt.interestingTerms', $query->getInterestingTerms());
$request->addParam('mlt.match.include', $query->getMatchInclude()); $request->addParam('mlt.match.include', $query->getMatchInclude());
$request->addParam('mlt.match.offset', $query->getStart()); $request->addParam('mlt.match.offset', $query->getStart());
$request->addParam('mlt.fl', $query->getMltFields()); $request->addParam('mlt.fl', implode(',', $query->getMltFields()));
$request->addParam('mlt.mintf', $query->getMinimumTermFrequency()); $request->addParam('mlt.mintf', $query->getMinimumTermFrequency());
$request->addParam('mlt.mindf', $query->getMinimumDocumentFrequency()); $request->addParam('mlt.mindf', $query->getMinimumDocumentFrequency());
$request->addParam('mlt.minwl', $query->getMinimumWordLength()); $request->addParam('mlt.minwl', $query->getMinimumWordLength());
...@@ -72,7 +72,7 @@ class RequestBuilder extends SelectRequestBuilder ...@@ -72,7 +72,7 @@ class RequestBuilder extends SelectRequestBuilder
$request->addParam('mlt.maxqt', $query->getMaximumQueryTerms()); $request->addParam('mlt.maxqt', $query->getMaximumQueryTerms());
$request->addParam('mlt.maxntp', $query->getMaximumNumberOfTokens()); $request->addParam('mlt.maxntp', $query->getMaximumNumberOfTokens());
$request->addParam('mlt.boost', $query->getBoost()); $request->addParam('mlt.boost', $query->getBoost());
$request->addParam('mlt.qf', $query->getQueryFields()); $request->addParam('mlt.qf', implode(',', $query->getQueryFields()));
// convert query to stream if necessary // convert query to stream if necessary
if (true === $query->getQueryStream()) { if (true === $query->getQueryStream()) {
......
...@@ -254,8 +254,9 @@ class Range extends Facet ...@@ -254,8 +254,9 @@ class Range extends Facet
*/ */
public function setOther($other) public function setOther($other)
{ {
if (is_array($other)) { if (is_string($other)) {
$other = implode(',', $other); $other = explode(',', $other);
$other = array_map('trim', $other);
} }
return $this->setOption('other', $other); return $this->setOption('other', $other);
...@@ -264,13 +265,14 @@ class Range extends Facet ...@@ -264,13 +265,14 @@ class Range extends Facet
/** /**
* Get other counts * Get other counts
* *
* In case of multiple values a comma separated string will be returned * @return array
*
* @return string
*/ */
public function getOther() public function getOther()
{ {
return $this->getOption('other'); $other = $this->getOption('other');
if ($other === null) $other = array();
return $other;
} }
/** /**
...@@ -284,8 +286,9 @@ class Range extends Facet ...@@ -284,8 +286,9 @@ class Range extends Facet
*/ */
public function setInclude($include) public function setInclude($include)
{ {
if (is_array($include)) { if (is_string($include)) {
$include = implode(',', $include); $include = explode(',', $include);
$include = array_map('trim', $include);
} }
return $this->setOption('include', $include); return $this->setOption('include', $include);
...@@ -294,12 +297,13 @@ class Range extends Facet ...@@ -294,12 +297,13 @@ class Range extends Facet
/** /**
* Get include option * Get include option
* *
* In case of multiple values a comma separated string will be returned * @return array
*
* @return string
*/ */
public function getInclude() public function getInclude()
{ {
return $this->getOption('include'); $include = $this->getOption('include');
if ($include === null) $include = array();
return $include;
} }
} }
...@@ -85,24 +85,32 @@ class MoreLikeThis extends Component ...@@ -85,24 +85,32 @@ class MoreLikeThis extends Component
* The fields to use for similarity. NOTE: if possible, these should have a * The fields to use for similarity. NOTE: if possible, these should have a
* stored TermVector * stored TermVector
* *
* Separate multiple fields with commas. * When using string input you can separate multiple fields with commas.
* *
* @param string $fields * @param string|array $fields
* @return self Provides fluent interface * @return self Provides fluent interface
*/ */
public function setFields($fields) public function setFields($fields)
{ {
if (is_string($fields)) {
$fields = explode(',', $fields);
$fields = array_map('trim', $fields);
}
return $this->setOption('fields', $fields); return $this->setOption('fields', $fields);
} }
/** /**
* Get fields option * Get fields option
* *
* @return string|null * @return array
*/ */
public function getFields() public function getFields()
{ {
return $this->getOption('fields'); $fields = $this->getOption('fields');
if($fields == null) $fields = array();
return $fields;
} }
/** /**
...@@ -276,24 +284,32 @@ class MoreLikeThis extends Component ...@@ -276,24 +284,32 @@ class MoreLikeThis extends Component
* Query fields and their boosts using the same format as that used in * Query fields and their boosts using the same format as that used in
* DisMaxQParserPlugin. These fields must also be specified in fields. * DisMaxQParserPlugin. These fields must also be specified in fields.
* *
* Separate multiple fields with commas. * When using string input you can separate multiple fields with commas.
* *
* @param string $queryFields * @param string $queryFields
* @return self Provides fluent interface * @return self Provides fluent interface
*/ */
public function setQueryFields($queryFields) public function setQueryFields($queryFields)
{ {
if (is_string($queryFields)) {
$queryFields = explode(',', $queryFields);
$queryFields = array_map('trim', $queryFields);
}
return $this->setOption('queryfields', $queryFields); return $this->setOption('queryfields', $queryFields);
} }
/** /**
* Get queryfields option * Get queryfields option
* *
* @return string|null * @return array
*/ */
public function getQueryFields() public function getQueryFields()
{ {
return $this->getOption('queryfields'); $queryfields = $this->getOption('queryfields');
if($queryfields == null) $queryfields = array();
return $queryfields;
} }
/** /**
......
...@@ -182,18 +182,12 @@ class FacetSet extends RequestBuilder ...@@ -182,18 +182,12 @@ class FacetSet extends RequestBuilder
$request->addParam("f.$field.facet.range.gap", $facet->getGap()); $request->addParam("f.$field.facet.range.gap", $facet->getGap());
$request->addParam("f.$field.facet.range.hardend", $facet->getHardend()); $request->addParam("f.$field.facet.range.hardend", $facet->getHardend());
if (null !== $facet->getOther()) { foreach ($facet->getOther() as $otherValue) {
$other = explode(',', $facet->getOther()); $request->addParam("f.$field.facet.range.other", $otherValue);
foreach ($other AS $otherValue) {
$request->addParam("f.$field.facet.range.other", trim($otherValue));
}
} }
if (null !== $facet->getInclude()) { foreach ($facet->getInclude() as $includeValue) {
$include = explode(',', $facet->getInclude()); $request->addParam("f.$field.facet.range.include", $includeValue);
foreach ($include AS $includeValue) {
$request->addParam("f.$field.facet.range.include", trim($includeValue));
}
} }
} }
} }
...@@ -58,7 +58,7 @@ class MoreLikeThis ...@@ -58,7 +58,7 @@ class MoreLikeThis
// enable morelikethis // enable morelikethis
$request->addParam('mlt', 'true'); $request->addParam('mlt', 'true');
$request->addParam('mlt.fl', $component->getFields()); $request->addParam('mlt.fl', implode(',', $component->getFields()));
$request->addParam('mlt.mintf', $component->getMinimumTermFrequency()); $request->addParam('mlt.mintf', $component->getMinimumTermFrequency());
$request->addParam('mlt.mindf', $component->getMinimumDocumentFrequency()); $request->addParam('mlt.mindf', $component->getMinimumDocumentFrequency());
$request->addParam('mlt.minwl', $component->getMinimumWordLength()); $request->addParam('mlt.minwl', $component->getMinimumWordLength());
...@@ -66,7 +66,7 @@ class MoreLikeThis ...@@ -66,7 +66,7 @@ class MoreLikeThis
$request->addParam('mlt.maxqt', $component->getMaximumQueryTerms()); $request->addParam('mlt.maxqt', $component->getMaximumQueryTerms());
$request->addParam('mlt.maxntp', $component->getMaximumNumberOfTokens()); $request->addParam('mlt.maxntp', $component->getMaximumNumberOfTokens());
$request->addParam('mlt.boost', $component->getBoost()); $request->addParam('mlt.boost', $component->getBoost());
$request->addParam('mlt.qf', $component->getQueryFields()); $request->addParam('mlt.qf', implode(',', $component->getQueryFields()));
$request->addParam('mlt.count', $component->getCount()); $request->addParam('mlt.count', $component->getCount());
return $request; return $request;
......
...@@ -97,24 +97,32 @@ class Query extends BaseQuery ...@@ -97,24 +97,32 @@ class Query extends BaseQuery
/** /**
* Set the field name(s) to get the terms from * Set the field name(s) to get the terms from
* *
* For multiple fields use a comma-separated string * For multiple fields use a comma-separated string or array
* *
* @param string $value * @param string|array $value
* @return self Provides fluent interface * @return self Provides fluent interface
*/ */
public function setFields($value) public function setFields($value)
{ {
if (is_string($value)) {
$value = explode(',', $value);
$value = array_map('trim', $value);
}
return $this->setOption('fields', $value); return $this->setOption('fields', $value);
} }
/** /**
* Get the field name(s) to get the terms from * Get the field name(s) to get the terms from
* *
* @return string * @return array
*/ */
public function getFields() public function getFields()
{ {
return $this->getOption('fields'); $value = $this->getOption('fields');
if ($value === null) $value = array();
return $value;
} }
/** /**
...@@ -246,24 +254,32 @@ class Query extends BaseQuery ...@@ -246,24 +254,32 @@ class Query extends BaseQuery
/** /**
* Set regex flags * Set regex flags
* *
* Use a comma-separated string for multiple entries * Use a comma-separated string or array for multiple entries
* *
* @param string $value * @param string|array $value
* @return self Provides fluent interface * @return self Provides fluent interface
*/ */
public function setRegexFlags($value) public function setRegexFlags($value)
{ {
if (is_string($value)) {
$value = explode(',', $value);
$value = array_map('trim', $value);
}
return $this->setOption('regexflags', $value); return $this->setOption('regexflags', $value);
} }
/** /**
* Get regex flags * Get regex flags
* *
* @return string * @return array
*/ */
public function getRegexFlags() public function getRegexFlags()
{ {
return $this->getOption('regexflags'); $value = $this->getOption('regexflags');
if ($value === null) $value = array();
return $value;
} }
/** /**
......
...@@ -73,17 +73,13 @@ class RequestBuilder extends BaseRequestBuilder ...@@ -73,17 +73,13 @@ class RequestBuilder extends BaseRequestBuilder
$request->addParam('terms.raw', $query->getRaw()); $request->addParam('terms.raw', $query->getRaw());
$request->addParam('terms.sort', $query->getSort()); $request->addParam('terms.sort', $query->getSort());
$fields = explode(',', $query->getFields()); foreach ($query->getFields() as $field) {
foreach ($fields as $field) {
$request->addParam('terms.fl', trim($field)); $request->addParam('terms.fl', trim($field));
} }
if ($query->getRegexFlags() !== null) { foreach ($query->getRegexFlags() as $flag) {
$flags = explode(',', $query->getRegexFlags());
foreach ($flags as $flag) {
$request->addParam('terms.regex.flag', trim($flag)); $request->addParam('terms.regex.flag', trim($flag));
} }
}
return $request; return $request;
} }
......
...@@ -59,9 +59,7 @@ class ResponseParser extends ResponseParserAbstract implements ResponseParserInt ...@@ -59,9 +59,7 @@ class ResponseParser extends ResponseParserAbstract implements ResponseParserInt
$data = $result->getData(); $data = $result->getData();
$query = $result->getQuery(); $query = $result->getQuery();
$field = $query->getFields(); foreach ($query->getFields() as $field) {
$fields = explode(',', $field);
foreach ($fields as $field) {
$field = trim($field); $field = trim($field);
if (isset($data['terms'][$field])) { if (isset($data['terms'][$field])) {
$terms = $data['terms'][$field]; $terms = $data['terms'][$field];
......
...@@ -666,6 +666,17 @@ class QueryTest extends \PHPUnit_Framework_TestCase ...@@ -666,6 +666,17 @@ class QueryTest extends \PHPUnit_Framework_TestCase
$value = 'name,description'; $value = 'name,description';
$this->query->setMltFields($value); $this->query->setMltFields($value);
$this->assertEquals(
array('name','description'),
$this->query->getMltFields()
);
}
public function testSetAndGetMltFieldsWithArray()
{
$value = array('name','description');
$this->query->setMltFields($value);
$this->assertEquals( $this->assertEquals(
$value, $value,
$this->query->getMltFields() $this->query->getMltFields()
...@@ -776,6 +787,17 @@ class QueryTest extends \PHPUnit_Framework_TestCase ...@@ -776,6 +787,17 @@ class QueryTest extends \PHPUnit_Framework_TestCase
$value = 'content,name'; $value = 'content,name';
$this->query->setQueryFields($value); $this->query->setQueryFields($value);
$this->assertEquals(
array('content','name'),
$this->query->getQueryFields()
);
}
public function testSetAndGetQueryFieldsWithArray()
{
$value = array('content','name');
$this->query->setQueryFields($value);
$this->assertEquals( $this->assertEquals(
$value, $value,
$this->query->getQueryFields() $this->query->getQueryFields()
......
...@@ -70,8 +70,8 @@ class RangeTest extends \PHPUnit_Framework_TestCase ...@@ -70,8 +70,8 @@ class RangeTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($options['end'], $this->facet->getEnd()); $this->assertEquals($options['end'], $this->facet->getEnd());
$this->assertEquals($options['gap'], $this->facet->getGap()); $this->assertEquals($options['gap'], $this->facet->getGap());
$this->assertEquals($options['hardend'], $this->facet->getHardend()); $this->assertEquals($options['hardend'], $this->facet->getHardend());
$this->assertEquals($options['other'], $this->facet->getOther()); $this->assertEquals(array($options['other']), $this->facet->getOther());
$this->assertEquals($options['include'], $this->facet->getInclude()); $this->assertEquals(array($options['include']), $this->facet->getInclude());
} }
public function testGetType() public function testGetType()
...@@ -115,25 +115,25 @@ class RangeTest extends \PHPUnit_Framework_TestCase ...@@ -115,25 +115,25 @@ class RangeTest extends \PHPUnit_Framework_TestCase
public function testSetAndGetOther() public function testSetAndGetOther()
{ {
$this->facet->setOther('all'); $this->facet->setOther('all');
$this->assertEquals('all', $this->facet->getOther()); $this->assertEquals(array('all'), $this->facet->getOther());
} }
public function testSetAndGetOtherArray() public function testSetAndGetOtherArray()
{ {
$this->facet->setOther(array('before','after')); $this->facet->setOther(array('before','after'));
$this->assertEquals('before,after', $this->facet->getOther()); $this->assertEquals(array('before','after'), $this->facet->getOther());
} }
public function testSetAndGetInclude() public function testSetAndGetInclude()
{ {
$this->facet->setInclude('all'); $this->facet->setInclude('all');
$this->assertEquals('all', $this->facet->getInclude()); $this->assertEquals(array('all'), $this->facet->getInclude());
} }
public function testSetAndGetIncludeArray() public function testSetAndGetIncludeArray()
{ {
$this->facet->setInclude(array('lower','upper')); $this->facet->setInclude(array('lower','upper'));
$this->assertEquals('lower,upper', $this->facet->getInclude()); $this->assertEquals(array('lower','upper'), $this->facet->getInclude());
} }
} }
...@@ -94,6 +94,17 @@ class MoreLikeThisTest extends \PHPUnit_Framework_TestCase ...@@ -94,6 +94,17 @@ class MoreLikeThisTest extends \PHPUnit_Framework_TestCase
$value = 'name,description'; $value = 'name,description';
$this->mlt->setFields($value); $this->mlt->setFields($value);
$this->assertEquals(
array('name','description'),
$this->mlt->getFields()
);
}
public function testSetAndGetFieldsWithArray()
{
$value = array('name','description');
$this->mlt->setFields($value);
$this->assertEquals( $this->assertEquals(
$value, $value,
$this->mlt->getFields() $this->mlt->getFields()
...@@ -182,6 +193,17 @@ class MoreLikeThisTest extends \PHPUnit_Framework_TestCase ...@@ -182,6 +193,17 @@ class MoreLikeThisTest extends \PHPUnit_Framework_TestCase
$value = 'content,name'; $value = 'content,name';
$this->mlt->setQueryFields($value); $this->mlt->setQueryFields($value);
$this->assertEquals(
array('content','name'),
$this->mlt->getQueryFields()
);
}
public function testSetAndGetQueryFieldsWithArray()
{
$value = array('content','name');
$this->mlt->setQueryFields($value);
$this->assertEquals( $this->assertEquals(
$value, $value,
$this->mlt->getQueryFields() $this->mlt->getQueryFields()
......
...@@ -64,7 +64,13 @@ class QueryTest extends \PHPUnit_Framework_TestCase ...@@ -64,7 +64,13 @@ class QueryTest extends \PHPUnit_Framework_TestCase
public function testSetAndGetFields() public function testSetAndGetFields()
{ {
$this->query->setFields('fieldA,fieldB'); $this->query->setFields('fieldA,fieldB');
$this->assertEquals('fieldA,fieldB', $this->query->getFields()); $this->assertEquals(array('fieldA','fieldB'), $this->query->getFields());
}
public function testSetAndGetFieldsWithArray()
{
$this->query->setFields(array('fieldA','fieldB'));
$this->assertEquals(array('fieldA','fieldB'), $this->query->getFields());
} }
public function testSetAndGetLowerbound() public function testSetAndGetLowerbound()
...@@ -106,7 +112,13 @@ class QueryTest extends \PHPUnit_Framework_TestCase ...@@ -106,7 +112,13 @@ class QueryTest extends \PHPUnit_Framework_TestCase
public function testSetAndGetRegexFlags() public function testSetAndGetRegexFlags()
{ {
$this->query->setRegexFlags('case_insensitive,comments'); $this->query->setRegexFlags('case_insensitive,comments');
$this->assertEquals('case_insensitive,comments', $this->query->getRegexFlags()); $this->assertEquals(array('case_insensitive','comments'), $this->query->getRegexFlags());
}
public function testSetAndGetRegexFlagsWithArray()
{
$this->query->setRegexFlags(array('case_insensitive','comments'));
$this->assertEquals(array('case_insensitive','comments'), $this->query->getRegexFlags());
} }
public function testSetAndGetLimit() public function testSetAndGetLimit()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment