Exemple #1
0
 /**
  * Get photos from the Sphinx search API within or adjacent to this place
  * @since Version 3.9.1
  * @param int $num
  * @return array
  */
 public function getPhotosFromSphinx($num = 10)
 {
     $Sphinx = AppCore::getSphinxAPI();
     $Sphinx->SetGeoAnchor("lat", "lon", deg2rad($this->lat), deg2rad($this->lon));
     $Sphinx->SetFilterRange("@geodist", 0, 5000);
     // 1km radius
     $Sphinx->SetSortMode(SPH_SORT_EXTENDED, '@geodist ASC');
     $result = $Sphinx->query("", "idx_images");
     $return = array("stat" => "ok");
     if (!$result) {
         $return['stat'] = "err";
         $return['message'] = $Sphinx->getLastError();
         return $return;
     }
     if (empty($result['matches'])) {
         return $return;
     }
     foreach ($result['matches'] as $row) {
         $meta = json_decode($row['attrs']['meta'], true);
         $return['photos'][] = array("id" => $row['attrs']['image_id'], "provider" => $row['attrs']['provider'], "photo_id" => $row['attrs']['photo_id'], "url" => $row['attrs']['url'], "distance" => round($row['attrs']['@geodist']), "lat" => rad2deg($row['attrs']['lat']), "lon" => rad2deg($row['attrs']['lon']), "title" => empty(trim($row['attrs']['title'])) ? "Untitled" : $row['attrs']['title'], "description" => $row['attrs']['description'], "sizes" => Images::normaliseSizes($meta['sizes']));
     }
     $return['photos'] = array_slice($return['photos'], 0, $num);
     return $return;
 }
Exemple #2
0
 /**
  * Find articles with similar titles (good for 404 errors)
  * @since Version 3.9.1
  * @return array
  * @param string $lookup The text to search Sphinx for
  * @param int $num The maximum number of results to return
  */
 public static function findCorrectArticle($lookup = false, $num = 5)
 {
     $Sphinx = AppCore::getSphinxAPI();
     $Sphinx->setLimits(0, $num);
     $results = $Sphinx->query($Sphinx->escapeString($lookup), "idx_news_article");
     return isset($results['matches']) ? $results['matches'] : array();
 }
Exemple #3
0
 /**
  * Find related news articles
  * @since Version 3.9
  * @return array
  *
  * @param int $num The maximum number of results to return
  */
 public function getRelatedArticles($num = 5)
 {
     $SphinxQL = $this->getSphinx();
     $title = preg_replace("/[^[:alnum:][:space:]]/u", '', $this->title);
     $title = trim($title);
     $title = str_replace(" ", "|", $title);
     $query = $SphinxQL->select("*")->from("idx_news_article")->match(array("story_title", "story_paragraphs"), $title, true)->where("story_id", "!=", $this->id)->where("story_time_unix", "BETWEEN", array(strtotime("1 year ago", time()), time()))->limit($num)->option("ranker", "proximity_BM25");
     $matches = $query->execute();
     if (count($matches)) {
         return $matches;
     }
     return array();
     $Sphinx = AppCore::getSphinxAPI();
     $Sphinx->setFilter("topic_id", array($this->Topic->id));
     $Sphinx->setFilter("story_id", array($this->id), true);
     $Sphinx->setFilterRange("story_time_unix", strtotime("1 year ago"), time());
     $Sphinx->setLimits(0, $num);
     $results = $Sphinx->query($Sphinx->escapeString($this->title), "idx_news_article");
     return isset($results['matches']) ? $results['matches'] : array();
 }