Browse Source

improves searching, fixes #158

bendavies 13 years ago
parent
commit
1a453a81ea
2 changed files with 7 additions and 5 deletions
  1. 2 2
      doc/schema.xml
  2. 5 3
      src/Packagist/WebBundle/Controller/WebController.php

+ 2 - 2
doc/schema.xml

@@ -38,11 +38,12 @@
     <fieldType name="text_edgengram" class="solr.TextField" positionIncrementGap="100">
     <fieldType name="text_edgengram" class="solr.TextField" positionIncrementGap="100">
         <analyzer type="index">
         <analyzer type="index">
             <tokenizer class="solr.StandardTokenizerFactory"/>
             <tokenizer class="solr.StandardTokenizerFactory"/>
+            <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" generateWordParts="1" preserveOriginal="1"/>
             <filter class="solr.LowerCaseFilterFactory"/>
             <filter class="solr.LowerCaseFilterFactory"/>
             <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="100" />
             <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="100" />
         </analyzer>
         </analyzer>
         <analyzer type="query">
         <analyzer type="query">
-            <tokenizer class="solr.StandardTokenizerFactory"/>
+            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
             <filter class="solr.LowerCaseFilterFactory"/>
             <filter class="solr.LowerCaseFilterFactory"/>
         </analyzer>
         </analyzer>
     </fieldType>
     </fieldType>
@@ -267,6 +268,5 @@
    <copyField source="name" dest="name_split"/>
    <copyField source="name" dest="name_split"/>
 
 
    <copyField source="name" dest="text_ngram"/>
    <copyField source="name" dest="text_ngram"/>
-   <copyField source="description" dest="text_ngram"/>
    <copyField source="tags" dest="text_ngram"/>
    <copyField source="tags" dest="text_ngram"/>
 </schema>
 </schema>

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

@@ -115,11 +115,13 @@ class WebController extends Controller
 
 
                 $select = $solarium->createSelect();
                 $select = $solarium->createSelect();
 
 
-                $escapedQuery = $select->getHelper()->escapePhrase($form->getData()->getQuery());
+                $escapedQuery = $select->getHelper()->escapeTerm($form->getData()->getQuery());
 
 
                 $dismax = $select->getDisMax();
                 $dismax = $select->getDisMax();
-                $dismax->setQueryFields(array('name', 'description', 'tags', 'text', 'text_ngram', 'name_split'));
-                $dismax->setBoostQuery('name:'.$escapedQuery.'^2 name_split:'.$escapedQuery.'^1.5');
+                $dismax->setQueryFields(array('name^2', 'description', 'tags', 'text', 'text_ngram', 'name_split^1.5'));
+                $dismax->setPhraseFields(array('description^30'));
+                //this is very lenient, and may want to be refined
+                $dismax->setMinimumMatch(1);
                 $dismax->setQueryParser('edismax');
                 $dismax->setQueryParser('edismax');
                 $select->setQuery($escapedQuery);
                 $select->setQuery($escapedQuery);