Search:

# CWIS Developers Documentation

- Main Page
- Classes
- Files

- Search for |

- File List
- File Members

# GlobalSearchEngine.php

Go to the documentation of this file.

    00001 <?PHP
    00002
    00003 #
    00004 #   FILE:  SPT--GlobalSearchEngine.php
    00005 #
    00006 #   METHODS PROVIDED:
    00007 #       GlobalSearchEngine()
    00008 #           - constructor
    00009 #       SomeMethod($SomeParameter, $AnotherParameter)
    00010 #           - short description of method
    00011 #
    00012 #   AUTHOR:  Edward Almasy
    00013 #
    00014 #   Part of CWIS and the Scout Portal Toolkit
    00015 #   Copyright 2005 Internet Scout
    00016 #   http://scout.wisc.edu
    00017 #
    00018
    00019 /*
    00020 OUTSTANDING ISSUES:
    00021 - search string(s) must be escaped (~XX)
    00022 - search scores must be normalized
    00023 */
    00024
    00025
    00026 class GlobalSearchEngine {
    00027
    00028     # ---- PUBLIC INTERFACE --------------------------------------------------
    00029
    00030     # object constructor
    00031     function GlobalSearchEngine()
    00032     {
    00033     }
    00034
    00035     # perform keyword search
    00036     function Search($SearchString, $StartingResult = 0, $NumberOfResults = 10)
    00037     {
    00038         # save start time to use in calculating search time
    00039         $StartTime = $this->GetMicrotime();
    00040
    00041         # create OAI-SQ set specification from search string
    00042         $SetSpec = "OAI-SQ!".$SearchString;
    00043
    00044         # perform global search
    00045         $SearchResults = $this->PerformSearch(
    00046                 $SetSpec, $StartingResult, $NumberOfResults);
    00047
    00048         # record search time
    00049         $this->LastSearchTime = $this->GetMicrotime() - $StartTime;
    00050
    00051         # return results to caller
    00052         return $SearchResults;
    00053     }
    00054
    00055     # perform search across multiple fields and return trimmed results to caller
    00056     function FieldedSearch($SearchStrings, $StartingResult = 0, $NumberOfResults = 10)
    00057     {
    00058     }
    00059
    00060     # report number of results found during last search
    00061     function NumberOfResults() {  return $this->NumberOfResultsAvailable;  }
    00062
    00063     # report time taken to perform last search
    00064     function SearchTime()
    00065     {
    00066         return $this->LastSearchTime;
    00067     }
    00068
    00069
    00070     # ---- PRIVATE INTERFACE -------------------------------------------------
    00071
    00072     var $NumberOfResultsAvailable;
    00073     var $LastSearchTime;
    00074
    00075     # perform OAI-SQ search
    00076     function PerformSearch($SetSpec, $StartingResult, $NumberOfResults)
    00077     {
    00078         # for each global search site
    00079         $DB = new SPTDatabase();
    00080         $DB->Query("SELECT * FROM GlobalSearchSites");
    00081         $SearchResults = array();
    00082         while ($SiteInfo = $DB->FetchRow())
    00083         {
    00084             # retrieve results from site
    00085             $SiteSearchResults = $this->SearchSite($SiteInfo, $SetSpec);
    00086
    00087             # add results to result list
    00088             $SearchResults = array_merge($SearchResults, $SiteSearchResults);
    00089         }
    00090
    00091         # sort the results in descending order by search score
    00092         function SearchScoreCmp($ResultA, $ResultB)
    00093         {
    00094             return ($ResultA["Search Score"] == $ResultB["Search Score"]) ? 0
    00095                     : (($ResultA["Search Score"] < $ResultB["Search Score"]) ? 1 : -1);
    00096         }
    00097         usort($SearchResults, "SearchScoreCmp");
    00098
    00099         # save number of results found
    00100         $this->NumberOfResultsAvailable = count($SearchResults);
    00101
    00102         # trim result list to match range requested by caller
    00103         $SearchResults = array_slice($SearchResults, $StartingResult, $NumberOfResults);
    00104
    00105         # return search results to caller
    00106         return $SearchResults;
    00107     }
    00108
    00109     # search one site
    00110     function SearchSite($SiteInfo, $SetSpec)
    00111     {
    00112         # create OAI client and perform query
    00113         $Client = new OAIClient($SiteInfo["OaiUrl"]);
    00114         $Client->SetSpec($SetSpec);
    00115         $QueryResults = $Client->GetRecords();
    00116
    00117         # for each result returned from query
    00118         foreach ($QueryResults as $Result)
    00119         {
    00120             # extract and save result data where available
    00121             unset($ResultData);
    00122             $ResultData["Title"] =
    00123                     isset($Result["metadata"]["DC:TITLE"][0])
    00124                     ? $Result["metadata"]["DC:TITLE"][0] : NULL;
    00125             $ResultData["Description"] =
    00126                     isset($Result["metadata"]["DC:DESCRIPTION"][0])
    00127                     ? $Result["metadata"]["DC:DESCRIPTION"][0] : NULL;
    00128             $ResultData["Url"] =
    00129                     isset($Result["metadata"]["DC:IDENTIFIER"][0])
    00130                     ? $Result["metadata"]["DC:IDENTIFIER"][0] : NULL;
    00131             $ResultData["Full Record Link"] =
    00132                     isset($Result["about"]["SEARCHINFO"]["FULLRECORDLINK"][0])
    00133                     ? $Result["about"]["SEARCHINFO"]["FULLRECORDLINK"][0] : NULL;
    00134             $ResultData["Search Score"] =
    00135                     isset($Result["about"]["SEARCHINFO"]["SEARCHSCORE"][0])
    00136                     ? $Result["about"]["SEARCHINFO"]["SEARCHSCORE"][0] : NULL;
    00137             $ResultData["Cumulative Rating"] =
    00138                     isset($Result["about"]["SEARCHINFO"]["CUMULATIVERATING"][0])
    00139                     ? $Result["about"]["SEARCHINFO"]["CUMULATIVERATING"][0] : NULL;
    00140             $ResultData["Cumulative Rating Scale"] =
    00141                     isset($Result["about"]["SEARCHINFO"]["CUMULATIVERATINGSCALE"][0])
    00142                     ? $Result["about"]["SEARCHINFO"]["CUMULATIVERATINGSCALE"][0] : NULL;
    00143
    00144             # save site info for result
    00145             $ResultData["Site ID"] = $SiteInfo["SiteId"];
    00146             $ResultData["Site Name"] = $SiteInfo["SiteName"];
    00147             $ResultData["Site URL"] = $SiteInfo["SiteUrl"];
    00148
    00149             # add result data to search results
    00150             $SearchResults[] = $ResultData;
    00151         }
    00152
    00153         # return search results to caller
    00154         return $SearchResults;
    00155     }
    00156
    00157     # convenience function for getting time in microseconds
    00158     function GetMicrotime()
    00159     {
    00160         list($usec, $sec) = explode(" ", microtime());
    00161         return ((float)$usec + (float)$sec);
    00162     }
    00163 }
    00164
    00165
    00166 ?>