add date sorting
authorChristian Weiske <cweiske@cweiske.de>
Wed, 10 Feb 2016 21:02:11 +0000 (22:02 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Wed, 10 Feb 2016 21:02:11 +0000 (22:02 +0100)
data/templates/search/sidebar.htm
src/phinde/Elasticsearch.php
www/index.php

index 9e36312c11480b9c92bf0bece00ec4e228165955..a48b6e805664d76d25da78a84428d3f85cd88a3a 100644 (file)
@@ -1,3 +1,12 @@
+{% if hitcount > 1 %}
+ Sort by:
+<div class="btn-group">
+ <a class="btn{%if sort==""%} disabled btn-primary{%endif%}" href="{{urlSortRelevance}}">Relevance</a>
+ <a class="btn{%if sort=="date"%} disabled btn-primary{%endif%}" href="{{urlSortDate}}">Date</a>
+</div>
+<br/>
+<br/>
+{% endif %}
 {% set filters %}
  {% include 'search/sidebar-filter.htm' with {'type': 'tags', 'title': 'Tag'} %}
  {% include 'search/sidebar-filter.htm' with {'type': 'domain', 'title': 'Domain'} %}
index 316f3da8684a79fcf24875224a12d22b9381b163..310b63bd1538009083e5287cfd0a23dd0f99c5ad 100644 (file)
@@ -68,8 +68,14 @@ class Elasticsearch
         $r->send();
     }
 
-    public function search($query, $filters, $site, $page, $perPage)
+    public function search($query, $filters, $site, $page, $perPage, $sort)
     {
+        if ($sort == 'date') {
+            $sortCfg = array('modate' => array('order' => 'desc'));
+        } else {
+            $sortCfg = array();
+        }
+
         $r = new Elasticsearch_Request(
             $this->baseUrl . 'document/_search',
             \HTTP_Request2::METHOD_GET
@@ -142,9 +148,7 @@ class Elasticsearch
             ),
             'from' => $page * $perPage,
             'size' => $perPage,
-            'sort' => array(
-                //array('modate' => array('order' => 'desc'))
-            )
+            'sort' => $sortCfg,
         );
         foreach ($filters as $type => $value) {
             $doc['query']['bool']['must'][] = array(
index 6f4ec8fd15f0286b535dd0ba9208060ceec307a5..54d5da80f4ba2afcdb455a4294854acd6b77d9a6 100644 (file)
@@ -16,6 +16,7 @@ if (isset($_GET['page'])) {
     //PEAR Pager begins at 1
     $page = (int)$_GET['page'] - 1;
 }
+
 $perPage = 10;//$GLOBALS['phinde']['perPage'];
 $site = null;
 $siteParam = false;
@@ -34,6 +35,13 @@ if (preg_match('#site:([^ ]*)#', $query, $matches)) {
     $cleanQuery = $query;
 }
 
+if (isset($_GET['sort']) && $_GET['sort'] == 'date') {
+    $sort = 'date';
+    $baseLink .= '&sort=date';
+} else {
+    $sort = '';
+}
+
 $filters = array();
 if (isset($_GET['filter'])) {
     $allowedFilter = array('domain', 'language', 'tags', 'term');
@@ -80,7 +88,7 @@ if (preg_match('#site:([^ ]*)#', $query, $matches)) {
 
 $timeBegin = microtime(true);
 $es = new Elasticsearch($GLOBALS['phinde']['elasticsearch']);
-$res = $es->search($cleanQuery, $filters, $site, $page, $perPage);
+$res = $es->search($cleanQuery, $filters, $site, $page, $perPage, $sort);
 $timeEnd = microtime(true);
 
 $pager = new Html_Pager(
@@ -124,6 +132,11 @@ if ($site !== null) {
     $urlNoSite = null;
 }
 
+$urlSortRelevance = buildLink(
+    str_replace('&sort=date', '', $baseLink), $filters, null, null
+);
+$urlSortDate = $urlSortRelevance . '&sort=date';
+
 render(
     'search',
     array(
@@ -137,7 +150,10 @@ render(
         'hits' => $res->hits->hits,
         'aggregations' => $res->aggregations,
         'activeFilters' => $activeFilters,
-        'pager' => $pager
+        'pager' => $pager,
+        'sort' => $sort,
+        'urlSortRelevance' => $urlSortRelevance,
+        'urlSortDate' => $urlSortDate,
     )
 );
 ?>