Exemple #1
0
 public function testPostgresQueryBuild()
 {
     $app = $this->getApp();
     $this->addSomeContent();
     $repo = $app['storage']->getRepository('bolt_pages');
     $query = $repo->createQueryBuilder('pages');
     $handler = new PostgresSearch($query, $app['query.search_config'], explode(' ', 'lorem ipsum'));
     $handler->setContentType('pages');
     $query = $handler->getQuery();
     $this->assertEquals(['pages.*', "ts_rank(bsearch.document, to_tsquery('lorem&ipsum')) as score"], $query->getQueryPart('select'));
     $this->assertEquals([['table' => 'bolt_pages', 'alias' => 'pages'], ['table' => "(SELECT *, setweight(to_tsvector(pages.title), 'A') || setweight(to_tsvector(pages.teaser), 'B') || setweight(to_tsvector(pages.body), 'B') AS document FROM bolt_pages pages GROUP BY pages.id)", 'alias' => 'bsearch']], $query->getQueryPart('from'));
     $this->assertInstanceOf('Doctrine\\DBAL\\Query\\Expression\\CompositeExpression', $query->getQueryPart('where'));
     $this->assertEquals(['score DESC'], $query->getQueryPart('orderBy'));
 }
 public function postgresSearch(ContentQueryParser $contentQuery)
 {
     $set = new SearchQueryResultset();
     foreach ($contentQuery->getContentTypes() as $contenttype) {
         $repo = $contentQuery->getEntityManager()->getRepository($contenttype);
         $query = $repo->createQueryBuilder($contenttype);
         $config = $contentQuery->getService('search_config');
         $search = $contentQuery->getParameter('filter');
         $adapter = new PostgresSearch($query, $config, explode(' ', $search));
         $adapter->setContentType($contenttype);
         $result = $repo->findWith($adapter->getQuery());
         $set->add($result, $contenttype);
     }
     return $set;
 }