Ejemplo n.º 1
0
 /**
  * @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;
 }
Ejemplo n.º 2
0
 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());
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 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());
 }