Skip to content

Commit 10165d3

Browse files
authored
Merge pull request #45 from biblibre/add-alphabetic-facet-sort
Add index order sorting on facet
2 parents 5d203b1 + fff96e3 commit 10165d3

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

src/Adapter.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,14 @@ public function getAvailableOperators(SearchIndexRepresentation $index)
191191

192192
return $operators;
193193
}
194+
195+
public function getAvailableFacetSorts(SearchIndexRepresentation $index)
196+
{
197+
$sorts = [
198+
'index asc' => $this->translator->translate('Index order asc'),
199+
'index desc' => $this->translator->translate('Index order desc'),
200+
];
201+
202+
return $sorts;
203+
}
194204
}

src/Querier.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,13 @@ public function query(Query $query)
255255
$solrQuery->setGroupOffset($offset);
256256
}
257257

258+
$facetSorts = $query->getFacetSorts();
259+
foreach ($facetSorts as $field => $sort) {
260+
$searchField = $this->getSearchField($field);
261+
$facetField = $searchField->facetField();
262+
$solrQuery->setParam("facet.sort.$facetField", $sort);
263+
}
264+
258265
$eventManager->setIdentifiers(['Solr\Querier']);
259266
$eventManager->trigger('solr.query', $solrQuery, ['query' => $query, 'solrNode' => $solrNode]);
260267

src/SolrQuery.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ public function jsonSerialize(): mixed
3333
$data['facet'] = [];
3434
$limit = $params['facet.limit'] ?? null;
3535
foreach ($params['facet.field'] as $field) {
36-
$data['facet'][$field] = ['type' => 'terms', 'field' => $field];
36+
if(isset($params["facet.sort.$field"])){
37+
$sort = $params["facet.sort.$field"] != '' ? $params["facet.sort.$field"] : 'count';
38+
$data['facet'][$field] = ['type' => 'terms', 'field' => $field, 'sort' => $sort];
39+
} else {
40+
unset($params["facet.sort.$field"]);
41+
}
3742
if (isset($limit)) {
3843
$data['facet'][$field]['limit'] = (int) $limit;
3944
}

0 commit comments

Comments
 (0)