function fetch_tweets_from_solr($opts, $more = array()) { $defaults = array('include_epilogue' => 1); $more = array_merge($defaults, $more); $date_range = "[ {$opts['year']}-01-01T00:00:00Z TO {$opts['year']}-12-31T23:59:59Z ]"; $parts = array("created_at" => $date_range, "favorited" => "false"); if ($user = $opts['username']) { $parts['username'] = $user; } $tweets = array(); $page = 1; $per_page = 1000; $page_count = null; while (!isset($page_count) || $page <= $page_count) { $query = array(); foreach ($parts as $k => $v) { $query[] = "{$k}:{$v}"; } if ($opts['exclude-retweets']) { $query[] = 'retweeted:false'; $query[] = '-text:RT*'; } if ($opts['exclude-replies']) { $query[] = '-reply_to_tweet_id:*'; } $params = array('q' => implode(" AND ", $query), 'sort' => 'created_at asc'); $_more = array('solr_endpoint' => $opts['solr'], 'per_page' => $per_page, 'page' => $page); $rsp = solr_select($params, $_more); if (!$rsp['ok']) { break; } if (!isset($page_count)) { $page_count = $rsp['pagination']['page_count']; } $tweets = array_merge($tweets, $rsp['rows']); $page += 1; } if ($more['include_epilogue']) { $next_year = $opts['year'] + 1; $date_range = "[ {$next_year}-01-01T00:00:00Z TO * ]"; $parts['created_at'] = $date_range; $query = array(); foreach ($parts as $k => $v) { $query[] = "{$k}:{$v}"; } $params = array('q' => implode(" AND ", $query), 'sort' => 'created_at asc'); $_more = array('solr_endpoint' => $opts['solr'], 'per_page' => 1, 'page' => 1); $rsp = solr_select($params, $_more); if ($rsp['ok'] && count($rsp['rows'])) { $tweets = array_merge($tweets, $rsp['rows']); } } return $tweets; }
function solr_select_nearby($lat, $lon, $params = array(), $more = array()) { $defaults = array("d" => 1, "sfield" => "location", "sort" => "geodist() asc"); $more = array_merge($defaults, $more); if (!isset($params['q'])) { $query = array("*" => "*"); $q = solr_utils_hash2query($query, " AND "); $params['q'] = $q; } $params['fq'] = "{!geofilt}"; $params['pt'] = "{$lat},{$lon}"; $params['sfield'] = $more['sfield']; $params['d'] = $more['d']; $params['sort'] = $more['sort']; return solr_select($params, $more); }
function flickr_photos_search(&$query, $more = array()) { if (!$GLOBALS['cfg']['enable_feature_solr']) { return not_okay('search indexing is disabled'); } # OMGWTF: When sorting by date_taken|posted the results # are basically anything but sorted. It's unclear to me # whether this is a known Lucene thing or ... what? I # suppose it might make sense to store dates as INTs but # then we lose the ability to do date facteing, for calendar # pages sometime in the future. So for now we'll just sort # by photo ID since it accomplishes the same thing... # (20111121/straup) # # see also: http://phatness.com/2009/11/sorting-by-date-with-solr/ $defaults = array('viewer_id' => 0, 'sort' => 'id desc'); $more = array_merge($defaults, $more); $q = solr_utils_hash2query($query, " AND "); $params = array('q' => $q, 'sort' => $more['sort']); $owner_id = isset($query['user_id']) ? $query['user_id'] : 0; if ($fq = _flickr_photos_search_perms_fq($owner_id, $more['viewer_id'], $more)) { $params['fq'] = $fq; } $rsp = solr_select($params, $more); if (!$rsp['ok']) { return $rsp; } $photos = array(); foreach ($rsp['rows'] as $row) { $photo = flickr_photos_get_by_id($row['id']); $can_view_geo = $photo['hasgeo'] && flickr_geo_permissions_can_view_photo($photo, $more['viewer_id']) ? 1 : 0; $photo['can_view_geo'] = $can_view_geo; $photos[] = $photo; } $rsp['rows'] = $photos; return $rsp; }