Add debug idindex-show action.

This commit is contained in:
Starbeamrainbowlabs 2016-08-26 17:47:46 +01:00
parent 671fd8dee4
commit d9b5bdfb3e
8 changed files with 88 additions and 12 deletions

View File

@ -1,4 +1,4 @@
# Changelog data# Changelog
## v0.12.1-dev ## v0.12.1-dev

View File

@ -496,7 +496,7 @@ define({ "api": [
"group": "Error 4xx", "group": "Error 4xx",
"optional": false, "optional": false,
"field": "NonExistentPageError", "field": "NonExistentPageError",
"description": "<p>The page doesn't exist and editing is disabled in the wiki's settings. If editing isn't disabled, you will be redirected to the edit apge instead.</p>" "description": "<p>The page doesn't exist and editing is disabled in the wiki's settings. If editing isn't disabled, you will be redirected to the edit page instead.</p>"
}, },
{ {
"group": "Error 4xx", "group": "Error 4xx",
@ -589,6 +589,24 @@ define({ "api": [
"filename": "./modules/feature-search.php", "filename": "./modules/feature-search.php",
"groupTitle": "Search" "groupTitle": "Search"
}, },
{
"type": "get",
"url": "?action=idindex-show",
"title": "Show the id index.",
"description": "<p>Outputs the id index. Useful if you need to verify that it's working as expected.</p>",
"name": "SearchShowIdIndex",
"group": "Search",
"permission": [
{
"name": "Anonymous",
"title": "Anybody may use this call.",
"description": ""
}
],
"version": "0.0.0",
"filename": "./modules/feature-search.php",
"groupTitle": "Search"
},
{ {
"type": "get", "type": "get",
"url": "?action=recentchanges", "url": "?action=recentchanges",

View File

@ -496,7 +496,7 @@
"group": "Error 4xx", "group": "Error 4xx",
"optional": false, "optional": false,
"field": "NonExistentPageError", "field": "NonExistentPageError",
"description": "<p>The page doesn't exist and editing is disabled in the wiki's settings. If editing isn't disabled, you will be redirected to the edit apge instead.</p>" "description": "<p>The page doesn't exist and editing is disabled in the wiki's settings. If editing isn't disabled, you will be redirected to the edit page instead.</p>"
}, },
{ {
"group": "Error 4xx", "group": "Error 4xx",
@ -589,6 +589,24 @@
"filename": "./modules/feature-search.php", "filename": "./modules/feature-search.php",
"groupTitle": "Search" "groupTitle": "Search"
}, },
{
"type": "get",
"url": "?action=idindex-show",
"title": "Show the id index.",
"description": "<p>Outputs the id index. Useful if you need to verify that it's working as expected.</p>",
"name": "SearchShowIdIndex",
"group": "Search",
"permission": [
{
"name": "Anonymous",
"title": "Anybody may use this call.",
"description": ""
}
],
"version": "0.0.0",
"filename": "./modules/feature-search.php",
"groupTitle": "Search"
},
{ {
"type": "get", "type": "get",
"url": "?action=recentchanges", "url": "?action=recentchanges",

View File

@ -6,7 +6,7 @@ define({
"apidoc": "0.2.0", "apidoc": "0.2.0",
"generator": { "generator": {
"name": "apidoc", "name": "apidoc",
"time": "2016-06-15T18:29:14.696Z", "time": "2016-08-26T16:47:22.344Z",
"url": "http://apidocjs.com", "url": "http://apidocjs.com",
"version": "0.16.1" "version": "0.16.1"
} }

View File

@ -6,7 +6,7 @@
"apidoc": "0.2.0", "apidoc": "0.2.0",
"generator": { "generator": {
"name": "apidoc", "name": "apidoc",
"time": "2016-06-15T18:29:14.696Z", "time": "2016-08-26T16:47:22.344Z",
"url": "http://apidocjs.com", "url": "http://apidocjs.com",
"version": "0.16.1" "version": "0.16.1"
} }

View File

@ -2139,7 +2139,7 @@ register_module([
* @apiDescription Causes the inverted search index to be completely rebuilt from scratch. Can take a while for large wikis! * @apiDescription Causes the inverted search index to be completely rebuilt from scratch. Can take a while for large wikis!
* @apiName SearchInvindexRebuild * @apiName SearchInvindexRebuild
* @apiGroup Search * @apiGroup Search
* @apiPermission Anonymous * @apiPermission Anonymous
*/ */
/* /*
@ -2159,6 +2159,20 @@ register_module([
search::rebuild_invindex(); search::rebuild_invindex();
}); });
/**
* @api {get} ?action=idindex-show Show the id index.
* @apiDescription Outputs the id index. Useful if you need to verify that it's working as expected.
* @apiName SearchShowIdIndex
* @apiGroup Search
* @apiPermission Anonymous
*/
add_action("idindex-show", function() {
global $idindex;
header("content-type: application/json; charset=UTF-8");
exit(json_encode($idindex, JSON_PRETTY_PRINT));
});
/** /**
* @api {get} ?action=search&query={text} Search the wiki for a given query string * @api {get} ?action=search&query={text} Search the wiki for a given query string
* @apiName Search * @apiName Search
@ -2350,7 +2364,7 @@ class search
public static function tokenize($source) public static function tokenize($source)
{ {
$source = strtolower($source); $source = strtolower($source);
return preg_split("/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))|\|/", $source, -1, PREG_SPLIT_NO_EMPTY); return preg_split("/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))|\|/u", $source, -1, PREG_SPLIT_NO_EMPTY);
} }
public static function strip_markup($source) public static function strip_markup($source)
@ -2362,15 +2376,21 @@ class search
{ {
global $pageindex, $env, $paths; global $pageindex, $env, $paths;
header("content-type: text/event-stream");
$invindex = []; $invindex = [];
foreach($pageindex as $pagename => $pagedetails) foreach($pageindex as $pagename => $pagedetails)
{ {
$pagesource = file_get_contents("$env->storage_prefix$pagename.md"); echo("Adding $pagename to the new search index.\n\n");
$pagesource = utf8_encode(file_get_contents("$env->storage_prefix$pagename.md"));
$index = self::index($pagesource); $index = self::index($pagesource);
self::merge_into_invindex($invindex, ids::getid($pagename), $index); self::merge_into_invindex($invindex, ids::getid($pagename), $index);
} }
echo("Search index rebuilding complete.\n\n");
echo("Saving new search index to '$paths->searchindex'.\n\n");
self::save_invindex($paths->searchindex, $invindex); self::save_invindex($paths->searchindex, $invindex);
} }

View File

@ -68,7 +68,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": 1471791401, "lastupdate": 1472229999,
"optional": false "optional": false
}, },
{ {

View File

@ -44,7 +44,7 @@ register_module([
* @apiDescription Causes the inverted search index to be completely rebuilt from scratch. Can take a while for large wikis! * @apiDescription Causes the inverted search index to be completely rebuilt from scratch. Can take a while for large wikis!
* @apiName SearchInvindexRebuild * @apiName SearchInvindexRebuild
* @apiGroup Search * @apiGroup Search
* @apiPermission Anonymous * @apiPermission Anonymous
*/ */
/* /*
@ -64,6 +64,20 @@ register_module([
search::rebuild_invindex(); search::rebuild_invindex();
}); });
/**
* @api {get} ?action=idindex-show Show the id index.
* @apiDescription Outputs the id index. Useful if you need to verify that it's working as expected.
* @apiName SearchShowIdIndex
* @apiGroup Search
* @apiPermission Anonymous
*/
add_action("idindex-show", function() {
global $idindex;
header("content-type: application/json; charset=UTF-8");
exit(json_encode($idindex, JSON_PRETTY_PRINT));
});
/** /**
* @api {get} ?action=search&query={text} Search the wiki for a given query string * @api {get} ?action=search&query={text} Search the wiki for a given query string
* @apiName Search * @apiName Search
@ -255,7 +269,7 @@ class search
public static function tokenize($source) public static function tokenize($source)
{ {
$source = strtolower($source); $source = strtolower($source);
return preg_split("/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))|\|/", $source, -1, PREG_SPLIT_NO_EMPTY); return preg_split("/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))|\|/u", $source, -1, PREG_SPLIT_NO_EMPTY);
} }
public static function strip_markup($source) public static function strip_markup($source)
@ -267,15 +281,21 @@ class search
{ {
global $pageindex, $env, $paths; global $pageindex, $env, $paths;
header("content-type: text/event-stream");
$invindex = []; $invindex = [];
foreach($pageindex as $pagename => $pagedetails) foreach($pageindex as $pagename => $pagedetails)
{ {
$pagesource = file_get_contents("$env->storage_prefix$pagename.md"); echo("Adding $pagename to the new search index.\n\n");
$pagesource = utf8_encode(file_get_contents("$env->storage_prefix$pagename.md"));
$index = self::index($pagesource); $index = self::index($pagesource);
self::merge_into_invindex($invindex, ids::getid($pagename), $index); self::merge_into_invindex($invindex, ids::getid($pagename), $index);
} }
echo("Search index rebuilding complete.\n\n");
echo("Saving new search index to '$paths->searchindex'.\n\n");
self::save_invindex($paths->searchindex, $invindex); self::save_invindex($paths->searchindex, $invindex);
} }