浏览代码

Push exact package_name match to top of results in search

Jordi Boggiano 8 年之前
父节点
当前提交
d13fd5c874

+ 2 - 0
doc/schema.xml

@@ -250,6 +250,8 @@
 
    <!-- extra name field allowing dashes to be omitted/misplaced -->
    <field name="name_split" type="text_en_splitting_tight" indexed="true" stored="false" />
+   <!-- extra name field allowing dashes to be omitted/misplaced and containing no vendor prefix -->
+   <field name="package_name" type="text_en_splitting_tight" indexed="true" stored="false" />
 
    <!-- extra catchall for ngram searches -->
    <field name="text_ngram" type="text_edgengram" indexed="true" stored="false" multiValued="true" />

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

@@ -162,6 +162,7 @@ class IndexPackagesCommand extends ContainerAwareCommand
                         $document = $update->createDocument();
                         $document->setField('id', $provided);
                         $document->setField('name', $provided);
+                        $document->setField('package_name', '');
                         $document->setField('description', '');
                         $document->setField('type', 'virtual-package');
                         $document->setField('trendiness', 100);
@@ -224,6 +225,7 @@ class IndexPackagesCommand extends ContainerAwareCommand
     ) {
         $document->setField('id', $package->getId());
         $document->setField('name', $package->getName());
+        $document->setField('package_name', $package->getPackageName());
         $document->setField('description', preg_replace('{[\x00-\x1f]+}u', '', $package->getDescription()));
         $document->setField('type', $package->getType());
         $document->setField('trendiness', $redis->zscore('downloads:trending', $package->getId()));

+ 1 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -85,7 +85,7 @@ class WebController extends Controller
 
             // configure dismax
             $dismax = $select->getDisMax();
-            $dismax->setQueryFields(array('name^4', 'description', 'tags', 'text', 'text_ngram', 'name_split^2'));
+            $dismax->setQueryFields(array('name^4', 'package_name^4', 'description', 'tags', 'text', 'text_ngram', 'name_split^2'));
             $dismax->setPhraseFields(array('description'));
             $dismax->setBoostFunctions(array('log(trendiness)^10'));
             $dismax->setMinimumMatch(1);