/** * @param $keyword * @return \Elastica\ResultSet */ public function search($keyword) { $query = new Query(); $query->setSize(1000); $fuzzyQuery = new Query\FuzzyLikeThis(); $fuzzyQuery->setLikeText($keyword); $fuzzyQuery->setMinSimilarity(0.7); $query->setQuery($fuzzyQuery); $results = $this->search->search($query); return $results; }
public function testNoLikeTextProvidedShouldReturnNoResults() { $client = $this->_getClient(); $index = new Index($client, 'test'); $index->create(array(), true); $index->getSettings()->setNumberOfReplicas(0); $type = new Type($index, 'helloworldfuzzy'); $mapping = new Mapping($type, array('email' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), 'content' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'))); $mapping->setSource(array('enabled' => false)); $type->setMapping($mapping); $doc = new Document(1000, array('email' => '*****@*****.**', 'content' => 'This is a sample post. Hello World Fuzzy Like This!')); $type->addDocument($doc); // Refresh index $index->refresh(); $fltQuery = new FuzzyLikeThis(); $fltQuery->setLikeText(""); $fltQuery->addFields(array("email", "content")); $fltQuery->setMinSimilarity(0.3); $fltQuery->setMaxQueryTerms(3); $resultSet = $type->search($fltQuery); $this->assertEquals(0, $resultSet->count()); }
/** * Find documents that are "like" provided text by running it against one or more * fields. * * @link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-flt-query.html * * @param string $value * @param array $fields * @param float $fuzziness * @return FuzzyLikeThis */ public function fuzzyLikeThis($value, array $fields = [], $fuzziness = 0.5) { $query = new FuzzyLikeThis(); $query->setLikeText($value); if (!empty($fields)) { $query->addFields($fields); } $query->setMinSimilarity($fuzziness); $this->query[] = $this->newQuery($query); return $query; }
public function testSetBoost() { $query = new FuzzyLikeThis(); $boost = 2.2; $query->setBoost($boost); $data = $query->toArray(); $this->assertEquals($boost, $data['fuzzy_like_this']['boost']); }
public function testSearchSetAnalyzer() { $client = $this->_getClient(); $index = new Index($client, 'test'); $index->create(array('analysis' => array('analyzer' => array('searchAnalyzer' => array('type' => 'custom', 'tokenizer' => 'standard', 'filter' => array('myStopWords'))), 'filter' => array('myStopWords' => array('type' => 'stop', 'stopwords' => array('The'))))), true); $index->getSettings()->setNumberOfReplicas(0); //$index->getSettings()->setNumberOfShards(1); $type = new Type($index, 'helloworldfuzzy'); $mapping = new Mapping($type, array('email' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'), 'content' => array('store' => 'yes', 'type' => 'string', 'index' => 'analyzed'))); $mapping->setSource(array('enabled' => false)); $type->setMapping($mapping); $doc = new Document(1000, array('email' => '*****@*****.**', 'content' => 'The Fuzzy Test!')); $type->addDocument($doc); $doc = new Document(1001, array('email' => '*****@*****.**', 'content' => 'Elastica Fuzzy Test')); $type->addDocument($doc); // Refresh index $index->refresh(); $fltQuery = new FuzzyLikeThis(); $fltQuery->addFields(array("email", "content")); $fltQuery->setLikeText("The"); $fltQuery->setMinSimilarity(0.1); $fltQuery->setMaxQueryTerms(3); // Test before analyzer applied, should return 1 result $resultSet = $type->search($fltQuery); $this->assertEquals(1, $resultSet->count()); $fltQuery->setParam('analyzer', 'searchAnalyzer'); $resultSet = $type->search($fltQuery); $this->assertEquals(0, $resultSet->count()); }