php - Solr Search sort by score in solr1.2 -
one of project utilize solr1.2 , when utilize "sort score" in search function it's not working.i don't know why?
can 1 explain this.i totally confuse.
my controller :
protected function globalsearch($searchterm, $productfilter = array()) { $solrservice = $this->get('syd.solr_service'); $solrquery = new solrquery('*:*'); $solrquery->addfield('id') ->addfield('first_product_slug') ->addfield('first_product_name') ->addfield('name') ->addfield('slug') ->addfield('thumbnail_path') ->addfield('product_slug') ->addfield('design_category_id') ->addsortfield('score', solrquery::order_desc); $solrquery->set("group", "true"); $solrquery->set("group.field", "first_product_id"); $solrquery->set("group.limit", 4); if($searchterm){ $filterqueries = array(); $searchterms = explode(' ',$searchterm); $searchterms[] = $searchterm; $searchterm = '("' . implode('" or "', $searchterms) . '")'; $filterquery = sprintf(self::search_string, $searchterm); $solrquery->addfilterquery($filterquery); } if (!empty($productfilter)) { $productfiltersarr = array(); $productfilterqry = ''; foreach ($productfilter $productfiltervalue ) { $productfiltersarr[] = 'first_product_slug:' . $productfiltervalue; } $productfilterqry = implode(' or ', $productfiltersarr); $solrquery->addfilterquery($productfilterqry); } $solrquery->setrows(1000); seek { $solrobject = $solrservice->query( 'sydprintbundle:designtemplate', $solrquery, solrservice::writer_format_solr_object ); $templates = $solrobject->offsetget('grouped')->offsetget('first_product_id')->offsetget('groups'); } grab (\exception $e) { $templates = array(); } if (!$templates) { if (!empty($searchterm)) { $this->setflash('catalog-message', 'no results found search.'); } homecoming array(); } if (!$searchterm) { if (!empty($searchterm)) { $this->setflash('catalog-message', 'no results found search.'); } homecoming array(); } homecoming $templates; }
when when utilize "sort score" in search function it's not working assume telling results not sorted score.
this because main query *:* , adding search terms via filter query, won't influence score. see https://wiki.apache.org/solr/commonqueryparameters#fq says
this parameter can used specify query can used restrict super set of documents can returned, without influencing score.
so if create search term filter query main query, should see results sorted score.
update: instead of
$solrquery = new solrquery('*:*');
use
$solrquery = new solrquery();
and instead of
$solrquery->addfilterquery($filterquery);
use
$solrquery->setquery($filterquery);
php symfony2 solr
No comments:
Post a Comment