Browse Source

added type to solr index and added type query-param for search action

Robert Gruendler 12 years ago
parent
commit
85a2349546

+ 1 - 0
doc/schema.xml

@@ -235,6 +235,7 @@
    <field name="name" type="text_general_rev" indexed="true" stored="true"/>
    <field name="description" type="text_general_rev" indexed="true" stored="true"/>
    <field name="tags" type="text_general_rev" indexed="true" stored="true" multiValued="true"/>
+   <field name="type" type="text_general_rev" indexed="true" stored="true"/>
 
    <!-- catchall field, containing all other searchable text fields (implemented
         via copyField further on in this schema  -->

+ 1 - 0
src/Packagist/WebBundle/Command/IndexPackagesCommand.php

@@ -133,6 +133,7 @@ class IndexPackagesCommand extends ContainerAwareCommand
         $document->setField('id', $package->getId());
         $document->setField('name', $package->getName());
         $document->setField('description', $package->getDescription());
+        $document->setField('type', $package->getType());
 
         $tags = array();
         foreach ($package->getVersions() as $version) {

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

@@ -129,9 +129,16 @@ class WebController extends Controller
                 $solarium = $this->get('solarium.client');
 
                 $select = $solarium->createSelect();
-
                 $escapedQuery = $select->getHelper()->escapeTerm($form->getData()->getQuery());
-
+                $typeFilter = $req->get('type');
+                
+                // filter by type
+                if ($typeFilter !== null) {
+                	$filterQueryTerm = sprintf('type:%s', $select->getHelper()->escapeTerm($typeFilter));
+                	$filterQuery = $select->createFilterQuery('type')->setQuery($filterQueryTerm);
+                	$select->addFilterQuery($filterQuery);
+                }
+                
                 $dismax = $select->getDisMax();
                 $dismax->setQueryFields(array('name^2', 'description', 'tags', 'text', 'text_ngram', 'name_split^1.5'));
                 $dismax->setPhraseFields(array('description^30'));