浏览代码

index tags, search for all fields

Igor Wiedler 13 年之前
父节点
当前提交
09602c3fbf

+ 10 - 2
src/Packagist/WebBundle/Command/IndexPackagesCommand.php

@@ -92,15 +92,23 @@ EOF
                 $document->name = $package->getName();
                 $document->description = $package->getDescription();
 
+                $tags = array();
+                foreach ($package->getVersions() as $version) {
+                    foreach ($version->getTags() as $tag) {
+                        $tags[] = $tag->getName();
+                    }
+                }
+                $document->tags = array_unique($tags);
+
                 $update->addDocument($document);
                 $update->addCommit();
 
+                $solarium->update($update);
+
                 $package->setIndexedAt(new \DateTime);
 
                 $em = $doctrine->getEntityManager();
                 $em->flush();
-
-                $solarium->update($update);
             } catch (\Exception $e) {
                 $output->writeln('<error>Exception: '.$e->getMessage().', skipping package '.$package->getName().'.</error>');
             }

+ 9 - 3
src/Packagist/WebBundle/Controller/WebController.php

@@ -97,10 +97,16 @@ class WebController extends Controller
             if ($form->isValid()) {
                 $solarium = $this->get('solarium.client');
 
-                $query = $solarium->createSelect();
-                $query->setQuery($searchQuery->getQuery());
+                $select = $solarium->createSelect();
 
-                $paginator = new Pagerfanta(new SolariumAdapter($solarium, $query));
+                $queryParts = array();
+                foreach (array('name', 'description', 'tags') as $field) {
+                    $escaped = $select->getHelper()->escapePhrase($searchQuery->getQuery());
+                    $queryParts[] = $field.':'.$escaped.'';
+                }
+                $select->setQuery(implode(' OR ', $queryParts));
+
+                $paginator = new Pagerfanta(new SolariumAdapter($solarium, $select));
                 $paginator->setMaxPerPage(15);
                 $paginator->setCurrentPage($req->query->get('page', 1), false, true);