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']); }
/** * @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'); }
/** * @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'); }
/** * @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'); }
/** * 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); }
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()); }
/** * 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; }