use filter-query for visible to speed things up

master
Gilles Crettenand 11 years ago
parent c00253d47d
commit 8c0d9bea5f

@ -13,7 +13,10 @@ class BookSearch
private $client;
/** @var \SolrQuery */
private $query;
/** @var array parts of the query, parameter 'q' */
private $queryParts = array();
/** @var array parts of the filter query, parameter 'fq' */
private $filterQueryParts = array();
public function __construct($edismax = true)
{
@ -79,12 +82,20 @@ class BookSearch
}
if (strlen($queryField) > 0) {
$queryText = "$queryField:\"$queryText\"";
$queryText = sprintf('%s:"%s"', $queryField, $queryText);
}
$this->queryParts[] = $queryText;
}
public function addFilterQuery($text, $field, $escape = true)
{
if($escape) {
$text = \SolrUtils::escapeQueryChars($text);
}
$this->filterQueryParts[] = sprintf('%s:"%s"', $field, $text);
}
public function addRange($field, $min = '*', $max = '*')
{
$this->queryParts[] = sprintf('%s:[%s TO %s]', $field, $min, $max);
@ -136,6 +147,9 @@ class BookSearch
else {
$query = implode(' AND ', $this->queryParts);
}
foreach($this->filterQueryParts as $fq) {
$this->query->addFilterQuery($fq);
}
$this->query->setQuery($query);
$this->query->setStart($start);
$this->query->setRows($count);
@ -279,7 +293,7 @@ class BookSearch
public static function GetTerms($field) {
$s = new BookSearch();
$s->addQuery(1, 'visible');
$s->addFilterQuery(1, 'visible');
$s->addFacetField($field);
$s->setFacetLimits(2000, 10);
$results = $s->getResults(0, 0);
@ -290,7 +304,7 @@ class BookSearch
public static function GetTermsRange($field) {
$s = new BookSearch();
$s->addQuery(1, 'visible');
$s->addFilterQuery(1, 'visible');
$s->setFacetRangeField($field);
$s->setFacetRange(0, 250, 1);
// to avoid useless calculation, only set this 'normal' facet

@ -538,7 +538,7 @@ class NetBiblio extends WebService
$bs = new BookSearch();
$bs->addSortField('random_'.$seed);
$bs->addQuery(1, 'visible');
$bs->addFilterQuery(1, 'visible');
$results = $bs->getResults($page * $number, $number);
return $this->AddBookData($results['books']);
}
@ -670,7 +670,7 @@ class NetBiblio extends WebService
}
if(isset($queryArray['jeunesse']) && $queryArray['jeunesse']['filtrer'] === 'filtrer') {
$bs->addQuery(1, 'jeunesse');
$bs->addFilterQuery(1, 'jeunesse');
}
if(isset($queryArray['duration'])) {
@ -697,7 +697,7 @@ class NetBiblio extends WebService
}
// we only want visible books in search results
$bs->addQuery(1, 'visible');
$bs->addFilterQuery(1, 'visible');
$count = isset($queryArray['count']) ? (int) $queryArray['count'] : Configuration::get('solr.result_count');
$start = isset($queryArray['page']) ? $queryArray['page'] * $count : 0;
@ -855,7 +855,7 @@ class NetBiblio extends WebService
$s->addSortField('availabilityDate');
// we only want visible books
$s->addQuery(1, 'visible');
$s->addFilterQuery(1, 'visible');
$results = $s->getResults(0, $number);
$books = $this->AddBookData($results['books']);

Loading…
Cancel
Save