This is an old revision of the document!
Table of Contents
searchtext plugin
Compatible with DokuWiki
Searches pages rendered as text instead of raw wiki. Displays search result snippets from rendered text.
Similar to docsearch, elasticsearch
This plugin searches pages rendered as text instead of raw wiki.
This plugin displays search result snippets from text.
This plugin requires:
- A text renderer, such as the text plugin
- A slight modification to add a FULLTEXT_SNIPPET_GETTEXT event to inc/fulltext.php if you wish to use the snippet capability (see below)
You will need a recent development version of DokuWiki to make this work!
Download
- http://cobs.rollerorgans.com/plugins/searchtext.zip – 2008-02-29, metadata bug fix, simplified event
- 2008-02-28, initial upload
Usage
There are two checkbox configuration items which appear at the bottom of the Admin Configuration Settings:
- Search in rendered text
- Display search result snippets from rendered text
You must edit the function ft_snippet() in ../inc/fulltext.php in order to provide a FULLTEXT_SNIPPET_GETTEXT event if you wish to use the snippet capability. A sample darcs patch would be:
[Allow plugin to insert search snippet text Todd Augsburger <todd@rollerorgans.com>**20080227000001 FULLTEXT_SNIPPET_GETTEXT Allow plugin to insert search snippet text ] { hunk ./inc/fulltext.php 254 - $text = rawWiki($id); + $text = trigger_event('FULLTEXT_SNIPPET_GETTEXT', $id, 'rawWiki'); }
Actual row in code may vary, for DokuWiki 2009-02-14 it's row 289.
Other plugins
This plugin requires a text renderer, such as text, available at http://cobs.rollerorgans.com/plugins/text.zip
Discussion
The develonly version already has a similar event, so then it's better to patch the plugin.
Replace
function register(&$controller) { $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, '_getSearch'); $controller->register_hook('FULLTEXT_SNIPPET_GETTEXT', 'BEFORE', $this, '_getSnippet'); } . . . function _getSnippet(&$event, $param) { if($this->getConf('snippet_in_text')) { global $ID; $prevID = $ID; $ID = $event->data; $event->result = p_cached_output(wikiFN($event->data),'text'); $ID = $prevID; $event->preventDefault(); } }
with
function register(&$controller) { $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, '_getSearch'); $controller->register_hook('FULLTEXT_SNIPPET_CREATE', 'BEFORE', $this, '_getSnippet'); } . . . function _getSnippet(&$event, $param) { if($this->getConf('snippet_in_text')) { global $ID; $prevID = $ID; $ID = $event->data['id']; $event->result = p_cached_output(wikiFN($event->data['id']),'text'); $ID = $prevID; $event->preventDefault(); } }
— HåkanS 2009/10/30 17:49
The latest DokuWiki (DokuWiki-2009-12-25c) works unmodified with the following _getSnippet():
function register(&$controller) { $controller->register_hook('INDEXER_PAGE_ADD', 'BEFORE', $this, '_getSearch'); $controller->register_hook('FULLTEXT_SNIPPET_CREATE', 'BEFORE', $this, '_getSnippet'); } function _getSnippet(&$event, $param) { if($this->getConf('snippet_in_text')) { global $ID; $prevID = $ID; $ID = $event->data['id']; $event->data['text'] = p_cached_output(wikiFN($event->data['id']),'text'); $ID = $prevID; } }
— Hansel Mon Jan 25 11:09:18 CET 2010
To make the modification above work properly you have to delete the old index and metadata: in <dokukiki>/data
sudo rm -rf cache/* meta/* index/*
— Hansel Tue Jan 26 08:12:59 UTC 2010 Howto recreate the indexes