Author: Nicolas Ruflin (spam@ruflin.com)
Inheritance: extends AbstractQuery
 public function testFuzzyWithFacets()
 {
     $index = $this->_createIndex();
     $type = $index->getType('test');
     $doc = new Document(1, array('name' => 'Basel-Stadt'));
     $type->addDocument($doc);
     $doc = new Document(2, array('name' => 'New York'));
     $type->addDocument($doc);
     $doc = new Document(3, array('name' => 'Baden'));
     $type->addDocument($doc);
     $doc = new Document(4, array('name' => 'Baden Baden'));
     $type->addDocument($doc);
     $index->refresh();
     $field = 'name';
     $fuzzyQuery = new Fuzzy();
     $fuzzyQuery->setField($field, 'Baden');
     $facet = new \Elastica\Facet\Terms('test');
     $facet->setField('name');
     $query = new \Elastica\Query($fuzzyQuery);
     $query->addFacet($facet);
     $resultSet = $index->search($query);
     // Assert query worked ok
     $this->assertEquals(2, $resultSet->count());
     // Check Facets
     $this->assertTrue($resultSet->hasFacets());
     $facets = $resultSet->getFacets();
     $this->assertEquals(2, $facets['test']['total']);
 }
Example #2
0
 /**
  * @group unit
  */
 public function testAddFieldDeprecated()
 {
     $query = new Fuzzy();
     $errorCollector = $this->startCollectErrors();
     $query->addField('user', array('value' => 'Nicolas', 'boost' => 1.0));
     $this->finishCollectErrors();
     $errorCollector->assertOnlyOneDeprecatedError('Query\\Fuzzy::addField is deprecated. Use setField and setFieldOption instead. This method will be removed in further Elastica releases');
 }
Example #3
0
 /**
  * @group unit
  */
 public function testBadArguments()
 {
     $this->setExpectedException('Elastica\\Exception\\InvalidException');
     $query = new Fuzzy();
     $query->addField('name', array(array('value' => 'Baden')));
     $this->setExpectedException('Elastica\\Exception\\InvalidException');
     $query = new Fuzzy();
     $query->setField('name', array());
     $this->setExpectedException('Elastica\\Exception\\InvalidException');
     $query = new Fuzzy();
     $query->setField('name', 'value');
     $query->setField('name1', 'value1');
 }
Example #4
0
 /**
  * @group unit
  */
 public function testBadArguments()
 {
     $this->setExpectedException('Elastica\\Exception\\InvalidException');
     $query = new Fuzzy();
     $err = array();
     set_error_handler(function () use(&$err) {
         $err[] = func_get_args();
     });
     $query->addField('name', array(array('value' => 'Baden')));
     restore_error_handler();
     $this->assertCount(1, $err);
     $this->assertEquals(E_USER_DEPRECATED, $err[0][0]);
     $this->setExpectedException('Elastica\\Exception\\InvalidException');
     $query = new Fuzzy();
     $query->setField('name', array());
     $this->setExpectedException('Elastica\\Exception\\InvalidException');
     $query = new Fuzzy();
     $query->setField('name', 'value');
     $query->setField('name1', 'value1');
 }
Example #5
0
 /**
  * Perform a basic search (currently fuzzy)
  *
  * @param $term
  * @param null $user
  * @param null $sortColumn
  * @param string $sortDirection
  * @param int $limit
  * @return array
  */
 public function basicSearch($term, $user = null, $sortColumn = null, $sortDirection = 'desc', $limit = 50)
 {
     $query = new Query();
     $query->setFrom(0);
     $query->setSize($limit);
     $fuzzy = new Fuzzy();
     $fuzzy->setField('value', $term);
     $fuzzy->setFieldOption('fuzziness', 2);
     if ($user) {
         $userId = $user->id;
         $boolQuery = new BoolQuery();
         $matchQuery = new Query\Match('user_id', $userId);
         $boolQuery->addMust($matchQuery);
         $boolQuery->addMust($fuzzy);
         $query->setQuery($boolQuery);
     }
     if ($sortColumn) {
         $query->addSort([$sortColumn => ['order' => $sortDirection]]);
     }
     $resultSet = $this->getTypedIndex()->search($query);
     return $this->getModels($resultSet);
 }
Example #6
0
 public function testQuery()
 {
     $client = $this->_getClient();
     $index = $client->getIndex('test');
     $index->create(array(), true);
     $type = $index->getType('test');
     $doc = new Document(1, array('name' => 'Basel-Stadt'));
     $type->addDocument($doc);
     $doc = new Document(2, array('name' => 'New York'));
     $type->addDocument($doc);
     $doc = new Document(3, array('name' => 'Baden'));
     $type->addDocument($doc);
     $doc = new Document(4, array('name' => 'Baden Baden'));
     $type->addDocument($doc);
     $index->refresh();
     $type = 'text_phrase';
     $field = 'name';
     $query = new Fuzzy();
     $query->addField('name', array('value' => 'Baden'));
     $resultSet = $index->search($query);
     $this->assertEquals(2, $resultSet->count());
 }
Example #7
0
 /**
  * The fuzzy query generates all possible matching terms that are within
  * the maximum edit distance specified in fuzziness and then checks the
  * term dictionary to find out which of those generated terms actually
  * exist in the index.
  *
  * @link https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-fuzzy-query.html
  *
  * @param string $key
  * @param string $value
  * @param array $options
  * @return Fuzzy
  */
 public function fuzzy($key, $value, $options = [])
 {
     $query = new Fuzzy($key, $value);
     foreach ($options as $option => $value) {
         $query->setFieldOption($option, $value);
     }
     $this->query[] = $this->newQuery($query);
     return $query;
 }