mirror of
https://github.com/sbrl/Pepperminty-Wiki.git
synced 2024-11-22 16:33:00 +00:00
Search System; Don't bother getting a page's id if we don't need to
This commit is contained in:
parent
3d3b6c491a
commit
19e49777b2
3 changed files with 31 additions and 16 deletions
|
@ -397,7 +397,7 @@ if($settings->sessionprefix == "auto")
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
/** The version of Pepperminty Wiki currently running. */
|
/** The version of Pepperminty Wiki currently running. */
|
||||||
$version = "v0.17-dev";
|
$version = "v0.17-dev";
|
||||||
$commit = "67648199d7ebd8a1b2ec400af0192dc0bb94b233";
|
$commit = "3d3b6c491a0848922e0dc3d8c1c89a5f87673c0e";
|
||||||
/// Environment ///
|
/// Environment ///
|
||||||
/** Holds information about the current request environment. */
|
/** Holds information about the current request environment. */
|
||||||
$env = new stdClass();
|
$env = new stdClass();
|
||||||
|
@ -3787,7 +3787,7 @@ register_module([
|
||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
foreach($results as &$result) {
|
foreach($results as &$result) {
|
||||||
$result["context"] = search::extract_context(
|
$result["context"] = search::extract_context(
|
||||||
$invindex, ids::getid($result["pagename"]),
|
$invindex, $result["pagename"],
|
||||||
$_GET["query"],
|
$_GET["query"],
|
||||||
file_get_contents($env->storage_prefix . $result["pagename"] . ".md")
|
file_get_contents($env->storage_prefix . $result["pagename"] . ".md")
|
||||||
);
|
);
|
||||||
|
@ -4454,13 +4454,14 @@ class search
|
||||||
reset($pageindex); // Reset array/object pointer
|
reset($pageindex); // Reset array/object pointer
|
||||||
foreach ($pageindex as $pagename => $pagedata)
|
foreach ($pageindex as $pagename => $pagedata)
|
||||||
{
|
{
|
||||||
// Get the current page's id
|
// Seteup a variable to hold the current page's id
|
||||||
$pageid = ids::getid($pagename);
|
$pageid = false; // Only fill this out if we find a match
|
||||||
// Consider matches in the page title
|
// Consider matches in the page title
|
||||||
$title_matches = mb_stripos_all($literator->transliterate($pagename), $qterm);
|
$title_matches = mb_stripos_all($literator->transliterate($pagename), $qterm);
|
||||||
$title_matches_count = $title_matches !== false ? count($title_matches) : 0;
|
$title_matches_count = $title_matches !== false ? count($title_matches) : 0;
|
||||||
if($title_matches_count > 0)
|
if($title_matches_count > 0)
|
||||||
{
|
{
|
||||||
|
$pageid = ids::getid($pagename); // Fill out the page id
|
||||||
// We found the qterm in the title
|
// We found the qterm in the title
|
||||||
if(!isset($matching_pages[$pageid]))
|
if(!isset($matching_pages[$pageid]))
|
||||||
$matching_pages[$pageid] = [ "nterms" => [] ];
|
$matching_pages[$pageid] = [ "nterms" => [] ];
|
||||||
|
@ -4478,6 +4479,9 @@ class search
|
||||||
|
|
||||||
if($tag_matches_count > 0) // And we found the qterm in the tags
|
if($tag_matches_count > 0) // And we found the qterm in the tags
|
||||||
{
|
{
|
||||||
|
if($pageid == false) // Fill out the page id if it hasn't been already
|
||||||
|
$pageid = ids::getid($pagename);
|
||||||
|
|
||||||
if(!isset($matching_pages[$pageid]))
|
if(!isset($matching_pages[$pageid]))
|
||||||
$matching_pages[$pageid] = [ "nterms" => [] ];
|
$matching_pages[$pageid] = [ "nterms" => [] ];
|
||||||
|
|
||||||
|
@ -4554,14 +4558,17 @@ class search
|
||||||
/**
|
/**
|
||||||
* Extracts a context string (in HTML) given a search query that could be displayed
|
* Extracts a context string (in HTML) given a search query that could be displayed
|
||||||
* in a list of search results.
|
* in a list of search results.
|
||||||
* @param string $query The search queary to generate the context for.
|
* @param string $invindex The inverted index to consult.
|
||||||
* @param string $source The page source to extract the context from.
|
* @param string $pagename The name of the paget that this source belongs to. Used when consulting the inverted index.
|
||||||
* @return string The generated context string.
|
* @param string $query The search queary to generate the context for.
|
||||||
|
* @param string $source The page source to extract the context from.
|
||||||
|
* @return string The generated context string.
|
||||||
*/
|
*/
|
||||||
public static function extract_context($invindex, $pageid, $query, $source)
|
public static function extract_context($invindex, $pagename, $query, $source)
|
||||||
{
|
{
|
||||||
global $settings;
|
global $settings;
|
||||||
|
|
||||||
|
$pageid = ids::getid($pagename);
|
||||||
$nterms = self::tokenize($query);
|
$nterms = self::tokenize($query);
|
||||||
$matches = [];
|
$matches = [];
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@
|
||||||
"author": "Starbeamrainbowlabs",
|
"author": "Starbeamrainbowlabs",
|
||||||
"description": "Adds proper search functionality to Pepperminty Wiki using an inverted index to provide a full text search engine. If pages don't show up, then you might have hit a stop word. If not, try requesting the `invindex-rebuild` action to rebuild the inverted index from scratch.",
|
"description": "Adds proper search functionality to Pepperminty Wiki using an inverted index to provide a full text search engine. If pages don't show up, then you might have hit a stop word. If not, try requesting the `invindex-rebuild` action to rebuild the inverted index from scratch.",
|
||||||
"id": "feature-search",
|
"id": "feature-search",
|
||||||
"lastupdate": 1530018727,
|
"lastupdate": 1530019335,
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -141,7 +141,7 @@ register_module([
|
||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
foreach($results as &$result) {
|
foreach($results as &$result) {
|
||||||
$result["context"] = search::extract_context(
|
$result["context"] = search::extract_context(
|
||||||
$invindex, ids::getid($result["pagename"]),
|
$invindex, $result["pagename"],
|
||||||
$_GET["query"],
|
$_GET["query"],
|
||||||
file_get_contents($env->storage_prefix . $result["pagename"] . ".md")
|
file_get_contents($env->storage_prefix . $result["pagename"] . ".md")
|
||||||
);
|
);
|
||||||
|
@ -808,13 +808,15 @@ class search
|
||||||
reset($pageindex); // Reset array/object pointer
|
reset($pageindex); // Reset array/object pointer
|
||||||
foreach ($pageindex as $pagename => $pagedata)
|
foreach ($pageindex as $pagename => $pagedata)
|
||||||
{
|
{
|
||||||
// Get the current page's id
|
// Seteup a variable to hold the current page's id
|
||||||
$pageid = ids::getid($pagename);
|
$pageid = false; // Only fill this out if we find a match
|
||||||
// Consider matches in the page title
|
// Consider matches in the page title
|
||||||
|
// FUTURE: We may be able to optimise this further by using preg_match_all + preg_quote instead of mb_stripos_all. Experimentation / benchmarking is required to figure out which one is faster
|
||||||
$title_matches = mb_stripos_all($literator->transliterate($pagename), $qterm);
|
$title_matches = mb_stripos_all($literator->transliterate($pagename), $qterm);
|
||||||
$title_matches_count = $title_matches !== false ? count($title_matches) : 0;
|
$title_matches_count = $title_matches !== false ? count($title_matches) : 0;
|
||||||
if($title_matches_count > 0)
|
if($title_matches_count > 0)
|
||||||
{
|
{
|
||||||
|
$pageid = ids::getid($pagename); // Fill out the page id
|
||||||
// We found the qterm in the title
|
// We found the qterm in the title
|
||||||
if(!isset($matching_pages[$pageid]))
|
if(!isset($matching_pages[$pageid]))
|
||||||
$matching_pages[$pageid] = [ "nterms" => [] ];
|
$matching_pages[$pageid] = [ "nterms" => [] ];
|
||||||
|
@ -832,6 +834,9 @@ class search
|
||||||
|
|
||||||
if($tag_matches_count > 0) // And we found the qterm in the tags
|
if($tag_matches_count > 0) // And we found the qterm in the tags
|
||||||
{
|
{
|
||||||
|
if($pageid == false) // Fill out the page id if it hasn't been already
|
||||||
|
$pageid = ids::getid($pagename);
|
||||||
|
|
||||||
if(!isset($matching_pages[$pageid]))
|
if(!isset($matching_pages[$pageid]))
|
||||||
$matching_pages[$pageid] = [ "nterms" => [] ];
|
$matching_pages[$pageid] = [ "nterms" => [] ];
|
||||||
|
|
||||||
|
@ -908,14 +913,17 @@ class search
|
||||||
/**
|
/**
|
||||||
* Extracts a context string (in HTML) given a search query that could be displayed
|
* Extracts a context string (in HTML) given a search query that could be displayed
|
||||||
* in a list of search results.
|
* in a list of search results.
|
||||||
* @param string $query The search queary to generate the context for.
|
* @param string $invindex The inverted index to consult.
|
||||||
* @param string $source The page source to extract the context from.
|
* @param string $pagename The name of the paget that this source belongs to. Used when consulting the inverted index.
|
||||||
* @return string The generated context string.
|
* @param string $query The search queary to generate the context for.
|
||||||
|
* @param string $source The page source to extract the context from.
|
||||||
|
* @return string The generated context string.
|
||||||
*/
|
*/
|
||||||
public static function extract_context($invindex, $pageid, $query, $source)
|
public static function extract_context($invindex, $pagename, $query, $source)
|
||||||
{
|
{
|
||||||
global $settings;
|
global $settings;
|
||||||
|
|
||||||
|
$pageid = ids::getid($pagename);
|
||||||
$nterms = self::tokenize($query);
|
$nterms = self::tokenize($query);
|
||||||
$matches = [];
|
$matches = [];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue