/** * {@inheritDoc} * * @api */ public function getItems($offset, $limit) { $query = $this->search->getQuery(); $query->setFrom($offset); $query->setSize($limit); return $this->search->search()->getResults(); }
public function findByCriteria(TrackRepositoryCriteria $criteria) { $boolQuery = new \Elastica\Query\BoolQuery(); if ($criteria->albumId()) { $query = new \Elastica\Query\Term(); $query->setParam('album.id', $criteria->albumId()); $boolQuery->addMust($query); } if ($criteria->albumTitle()) { $query = new \Elastica\Query\Match(); $query->setFieldQuery('album.title', $criteria->albumTitle()); $query->setFieldFuzziness('album.title', 2); $boolQuery->addMust($query); } if ($criteria->trackName()) { $query = new \Elastica\Query\Match(); $query->setFieldQuery('name', $criteria->trackName()); $query->setFieldFuzziness('name', 2); $boolQuery->addMust($query); } if ($criteria->composer()) { $query = new \Elastica\Query\Match(); $query->setFieldQuery('composer', $criteria->composer()); $query->setFieldFuzziness('composer', 2); $boolQuery->addMust($query); } $this->elasticaSearch->setQuery($boolQuery); $query = $this->elasticaSearch->getQuery(); $query->setSize($criteria->size()); $query->setFrom(($criteria->page() - 1) * $criteria->size()); $query->addSort(['name_not_analyzed' => ['order' => 'asc']]); return $this->buildEntities($this->elasticaSearch->search()->getResults()); }
/** * Run a search. * * @param Query $q * @return ResultSet */ protected function doSearch(Query $q) { $search = new Search($this->client); $search->addIndex('bash')->addType('bash'); $search->setQuery($q); return $search->search(); }
/** * @group functional */ public function testHasParent() { $index = $this->_createIndex(); $shopType = $index->getType('shop'); $productType = $index->getType('product'); $mapping = new Mapping(); $mapping->setParent('shop'); $productType->setMapping($mapping); $shopType->addDocuments(array(new Document('zurich', array('brand' => 'google')), new Document('london', array('brand' => 'apple')))); $doc1 = new Document(1, array('device' => 'chromebook')); $doc1->setParent('zurich'); $doc2 = new Document(2, array('device' => 'macmini')); $doc2->setParent('london'); $productType->addDocument($doc1); $productType->addDocument($doc2); $index->refresh(); // All documents $parentQuery = new HasParent(new MatchAll(), $shopType->getName()); $search = new Search($index->getClient()); $results = $search->search($parentQuery); $this->assertEquals(2, $results->count()); $match = new Match(); $match->setField('brand', 'google'); $parentQuery = new HasParent($match, $shopType->getName()); $search = new Search($index->getClient()); $results = $search->search($parentQuery); $this->assertEquals(1, $results->count()); $result = $results->current(); $data = $result->getData(); $this->assertEquals($data['device'], 'chromebook'); }
/** * @group functional */ public function testShouldReturnTheRightNumberOfResult() { $filter = new Nested(); $this->assertEquals(array('nested' => array()), $filter->toArray()); $query = new Terms(); $query->setTerms('hobby', array('guitar')); $filter->setPath('hobbies'); $filter->setFilter($query); $client = $this->_getClient(); $search = new Search($client); $index = $this->_getIndexForTest(); $search->addIndex($index); $resultSet = $search->search($filter); $this->assertEquals(1, $resultSet->getTotalHits()); $filter = new Nested(); $this->assertEquals(array('nested' => array()), $filter->toArray()); $query = new Terms(); $query->setTerms('hobby', array('opensource')); $filter->setPath('hobbies'); $filter->setFilter($query); $client = $this->_getClient(); $search = new Search($client); $index = $this->_getIndexForTest(); $search->addIndex($index); $resultSet = $search->search($filter); $this->assertEquals(2, $resultSet->getTotalHits()); }
function get_limit($start, $count) { $this->query->from($start); $this->query->size($count); $search = new Search($this->client); return $search->search($this->query->toArray())->getResults(); }
/** * @return \Elastica\ResultSet */ public function getSearchResult() { $index = $this->search->getIndex($this->getIndexName() . '_' . $this->language); $search = new Search($this->search->getClient()); $search->addIndex($index); $search->addType($index->getType($this->indexType)); $result = $search->search($this->query); return $result; }
/** * Perform the show action for a block * * @param ReadBlockInterface $block * * @return Response */ public function show(ReadBlockInterface $block) { $request = $this->requestStack->getCurrentRequest(); $data = $request->get('elastica_search'); $searchData = array(); if (is_array($data) && array_key_exists('search', $data) && null !== $data['search']) { $searchParameter = $data['search']; $index = $this->client->getIndex($this->indexName); $qb = new QueryBuilder(); $search = new Search($this->client); $search->addIndex($index); $search->setQuery($qb->query()->filtered($qb->query()->query_string($searchParameter), $qb->filter()->bool()->addMust($qb->filter()->term(array('language' => $request->getLocale()))))); $searchData = $search->search(null, array('limit' => $block->getAttribute('searchLimit'))); } return $this->render('OpenOrchestraElasticaFrontBundle:Block/List:show.html.twig', array('searchData' => $searchData)); }
/** * @group functional */ public function testMatchAllIndicesTypes() { $index1 = $this->_createIndex(); $index2 = $this->_createIndex(); $client = $index1->getClient(); $search1 = new Search($client); $resultSet1 = $search1->search(new MatchAll()); $doc1 = new Document(1, array('name' => 'ruflin')); $doc2 = new Document(1, array('name' => 'ruflin')); $index1->getType('test')->addDocument($doc1); $index2->getType('test')->addDocument($doc2); $index1->refresh(); $index2->refresh(); $search2 = new Search($client); $resultSet2 = $search2->search(new MatchAll()); $this->assertEquals($resultSet1->getTotalHits() + 2, $resultSet2->getTotalHits()); }
/** * * @return bool */ public function searchHtml() { $q = $this->getQuery(); if (!$q) { echo json_encode(null); exit; } $es = $this->app->container->get('elastica.client'); $search = new Search($es); $results = $search->search($q); $hits = []; foreach ($results->getResults() as $result) { $result = $result->getHit(); $hits[] = $result['_source']; } $this->app->render('partials/searchResutls.html', ['packages' => $hits]); return true; }
public function readData($source_definition, $rest_parameters = []) { Pager::setDefaultLimit(500); list($limit, $offset) = Pager::calculateLimitAndOffset(); $client = new Client(['host' => $source_definition['host'], 'port' => $source_definition['port'], 'username' => $source_definition['username'], 'password' => $source_definition['password']]); $index = $client->getIndex($source_definition['es_index']); $type = $index->getType($source_definition['es_type']); $search = new Search($client); $search->addIndex($index); $search->addType($type); $query_param = \Input::get('query'); if (empty($query_param)) { $query = new MatchAll(); $search->setQuery($query); } else { $query = new SimpleQueryString($query_param); $search->setQuery($query); } $search->getQuery()->setFrom($offset); $search->getQuery()->setSize($limit); $resultSet = $search->search(); $data = new Data(); $data_results = []; foreach ($resultSet->getResults() as $result) { $data_result = $result->getData(); unset($data_result['__tdt_etl_timestamp__']); $data_results[] = $data_result; } $data->data = $data_results; if ($resultSet->getTotalHits() > 0) { $paging = Pager::calculatePagingHeaders($limit, $offset, $resultSet->getTotalHits()); $data->paging = $paging; } $data->preferred_formats = $this->getPreferredFormats(); return $data; }
/** * @param int $from * @param int $size * * @return array */ public function allStats($from = null, $size = null) { $_query = ['query' => ['term' => ['fabric.facility.raw' => 'cloud/cli/metrics']], 'size' => $size ?: 99999999, 'from' => $from ?: 0, 'sort' => ['@timestamp' => ['order' => 'desc']]]; $_query = new Query($_query); $_search = new Search($this->_client); $_result = $_search->search($_query)->getResults(); $_data = []; foreach ($_result as $_hit) { $_data[] = $_hit->getSource(); } return $_data; }
/** * Invoke Elasticsearch search. * * @param Query $query * @param string $index * @param string $type * @param array $options * * @return \Elastica\ResultSet */ public function search($query, $type, $index = 'activehire', $options = []) { $search = new Search($this->client); $search->addType($type); $search->addIndex($index); $search->setOptions($options); $result = $search->search($query); return $result; }
<?php require_once 'vendor/autoload.php'; use Elastica\Client; use Elastica\Query; use Elastica\Query\QueryString; use Elastica\Search; $client = new Client(); $index = $client->getIndex('index000'); $type = $index->getType('jdbc'); $search = new Search($client); $query = new QueryString('クエリー'); $search->setQuery($query); $resultSet = $search->search(); foreach ($resultSet as $res) { $d = $res->getData(); print_r($d); } ?>
public function findAllWithTracks() : array { $query = new \Elastica\Query(new \Elastica\Aggregation\Range('playList.name')); $this->elasticaSearch->setQuery($query); return $this->buildEntities($this->elasticaSearch->search()->getResults()); }
/** * @group functional */ public function testQueryCacheOption() { $client = $this->_getClient(); $index = $client->getIndex('zero'); $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); $type = $index->getType('zeroType'); $type->addDocuments(array(new Document(1, array('id' => 1, 'username' => 'farrelley')), new Document(2, array('id' => 2, 'username' => 'bunny')))); $index->refresh(); $aggregation = new Aggregation\Terms('username'); $aggregation->setField('username'); $query = new Query(); $query->addAggregation($aggregation); $search = new Search($client); $search->addIndex($index); $search->setQuery($query); $search->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_COUNT); $search->setOption(Search::OPTION_QUERY_CACHE, true); // before search query cache should be empty $statsData = $index->getStats()->getData(); $queryCache = $statsData['_all']['primaries']['query_cache']; $this->assertEquals(0, $queryCache['memory_size_in_bytes']); $this->assertEquals(0, $queryCache['evictions']); $this->assertEquals(0, $queryCache['hit_count']); $this->assertEquals(0, $queryCache['miss_count']); // first search should result in cache miss and save data to cache $search->search(); $index->getStats()->refresh(); $statsData = $index->getStats()->getData(); $queryCache = $statsData['_all']['primaries']['query_cache']; $this->assertNotEquals(0, $queryCache['memory_size_in_bytes']); $this->assertEquals(0, $queryCache['evictions']); $this->assertEquals(0, $queryCache['hit_count']); $this->assertEquals(1, $queryCache['miss_count']); // next search should result in cache hit $search->search(); $index->getStats()->refresh(); $statsData = $index->getStats()->getData(); $queryCache = $statsData['_all']['primaries']['query_cache']; $this->assertNotEquals(0, $queryCache['memory_size_in_bytes']); $this->assertEquals(0, $queryCache['evictions']); $this->assertEquals(1, $queryCache['hit_count']); $this->assertEquals(1, $queryCache['miss_count']); }
/** * @group functional */ public function testAddDocumentHashId() { $index = $this->_createIndex(); $type = $index->getType('test2'); $hashId = '#1'; $doc = new Document($hashId, array('name' => 'ruflin')); $type->addDocument($doc); $index->refresh(); $search = new Search($index->getClient()); $search->addIndex($index); $resultSet = $search->search(new MatchAll()); $this->assertEquals($hashId, $resultSet->current()->getId()); $doc = $type->getDocument($hashId); $this->assertEquals($hashId, $doc->getId()); }
public function testEmptySearch() { $client = $this->_getClient(); $search = new Search($client); $index = $client->getIndex('zero'); $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true); $docs = array(); $docs[] = new Document(1, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'farrelley')); $docs[] = new Document(2, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'farrelley')); $docs[] = new Document(3, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'farrelley')); $docs[] = new Document(4, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'farrelley')); $docs[] = new Document(5, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'farrelley')); $docs[] = new Document(6, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'farrelley')); $docs[] = new Document(7, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'farrelley')); $docs[] = new Document(8, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'bunny')); $docs[] = new Document(9, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'bunny')); $docs[] = new Document(10, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'bunny')); $docs[] = new Document(11, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'bunny')); $type = $index->getType('zeroType'); $type->addDocuments($docs); $index->refresh(); $search->addIndex($index)->addType($type); $resultSet = $search->search(); $this->assertInstanceOf('Elastica\\ResultSet', $resultSet); $this->assertCount(10, $resultSet); $this->assertEquals(11, $resultSet->getTotalHits()); $query = new QueryString('bunny'); $search->setQuery($query); $resultSet = $search->search(); $this->assertCount(4, $resultSet); $this->assertEquals(4, $resultSet->getTotalHits()); $source = $resultSet->current()->getSource(); $this->assertEquals('bunny', $source['username']); }
protected function searchDocuments() { dump(__METHOD__); $client = $this->getClient(); $index = $client->getIndex($this->getIndexName()); $type = $index->getType($this->getTypeName()); if (true) { $query = json_decode('{"query":{"bool":{"must":[{"term":{"uid":19246}},{"term":{"name":"XXXXXXXXXX"}},{"term":{"op":30}}],"filter":[{"range":{"level":{"from":10,"to":300}}},{"range":{"addtime":{"gte":"20150706T145200+0800","lte":"20150707T145203+0800"}}}]}}}', true); dump($query); $path = $index->getName() . '/' . $type->getName() . '/_search'; $response = $client->request($path, Request::GET, $query); $this->assertTrue($response->isOk()); // dump($response->getEngineTime()); // dump($response->getQueryTime()); // dump($response->getShardsStatistics()); // dump($response->getStatus()); // http status code // dump($response->getTransferInfo()); dump($response->getData()['hits']['hits']); } if (false) { $search = new Search($client); $search->addIndex($index)->addType($type); $query = new Query\BoolQuery(); // $query->setFrom(0); // $query->setSize(10); // $query->setSort(['uid' => 'asc']); // $query->setFields(['snsid', 'uid']); // $query->setHighlight(['fields' => 'uid']); // $query->setExplain(true); // $term = new Query\Term(['name' => 'XXXXXXXXXX']); // $query->setQuery($term); $query->addMust(new Term(['uid' => 19246])); $query->addMust(new Term(['name' => 'XXXXXXXXXX'])); $query->addMust(new Term(['op' => 30])); // $query->addMustNot(new Term(['country' => 'CN'])); $range = new Query\Range('level', ['from' => 10, 'to' => 300]); $query->addFilter($range); $range = new Query\Range(); $range->addField('addtime', ['gte' => '20150706T145200+0800', 'lte' => '20150707T145203+0800']); $query->addFilter($range); $search->setQuery($query); $resultSet = $search->search(); dump('Hit: ' . $resultSet->count()); $queryArray = $resultSet->getQuery()->toArray(); dump(json_encode($queryArray)); dump($resultSet->getResponse()->getData()['hits']['hits']); dump('query time: ' . \PHP_Timer::secondsToTimeString($resultSet->getResponse()->getQueryTime())); } }
/** * @group functional */ public function testIgnoreUnavailableOption() { $client = $this->_getClient(); $index = $client->getIndex('elastica_7086b4c2ee585bbb6740ece5ed7ece01'); $query = new MatchAll(); $search = new Search($client); $search->addIndex($index); $exception = null; try { $search->search($query); } catch (ResponseException $e) { $exception = $e; } $error = $exception->getResponse()->getFullError(); $this->assertEquals('index_not_found_exception', $error['type']); $results = $search->search($query, array(Search::OPTION_SEARCH_IGNORE_UNAVAILABLE => true)); $this->assertInstanceOf('\\Elastica\\ResultSet', $results); }
public function testShouldReturnTheRightNumberOfResult() { $f = new Nested(); $this->assertEquals(array('nested' => array()), $f->toArray()); $q = new Terms(); $q->setTerms('hobby', array('guitar')); $f->setPath('hobbies'); $f->setFilter($q); $c = $this->_getClient(); $s = new Search($c); $i = $c->getIndex('elastica_test_filter_nested_abstract_filter'); $s->addIndex($i); $r = $s->search($f); $this->assertEquals(1, $r->getTotalHits()); $f = new Nested(); $this->assertEquals(array('nested' => array()), $f->toArray()); $q = new Terms(); $q->setTerms('hobby', array('opensource')); $f->setPath('hobbies'); $f->setFilter($q); $c = $this->_getClient(); $s = new Search($c); $i = $c->getIndex('elastica_test_filter_nested_abstract_filter'); $s->addIndex($i); $r = $s->search($f); $this->assertEquals(2, $r->getTotalHits()); }
public function searchAction() { //WIP, todo: export to repository and use it in Search Playlists $elasticaClient = new Client(); $playListIndex = $elasticaClient->getIndex('playlist'); $trackType = $playListIndex->getType('track'); $search = new Search($elasticaClient); $search->addIndex($playListIndex)->addType($trackType); $query = new Query(); $query->setSize(5)->setSort(['name' => 'asc'])->setFields(['name', 'ids', 'id', 'composer'])->setExplain(true)->setVersion(true)->setHighlight(['fields' => 'composer']); $query->setQuery(new MatchAll()); // $query->addAggregation(new \Elastica\Aggregation\Range('name')); // $term = new \Elastica\Suggest\Term('name', 'field'); // $term->setText('aaaaa'); // $query->setSuggest(new \Elastica\Suggest($term)); // $query->setFacets([new \Elastica\Facet\Range('name')]); $search->setQuery($query); $resultSet = $search->search(); $numberOfEntries = $search->count(); $results = $resultSet->getResults(); $totalResults = $resultSet->getTotalHits(); return $this->render('PlayWithElasticSearchBundle:Elastica:search.html.twig', ['query' => $query, 'numberOfEntries' => $numberOfEntries, 'resultSet' => $resultSet, 'results' => $results, 'totalResults' => $totalResults]); }