2005-02-18

Wiki の横断検索と Namazu

※ 以後、Namazu, Namazu って書いているけど、同じ方法が使えれば estraier でもなんでもいいです。

Wiki は普通 grep 検索できるので Namazu は必要ない。よほどページ数が増えればスピードの問題が出てくるが、普通はインデックスを起こすタイプの検索エンジンは Wiki にはそんなに必要ない。1

ただし Wiki が増えた場合はそうはいかない。自分は PukiWiki をローカルで使っているが、WikiFarm というか、複数の Wiki に分けて使っている。PukiWiki は 1.4.4 になって複数の Wiki で同じ lib/ を共有しやすくなったり、以前より複数の Wiki を動かすのは簡単になっている2ので、興味がある人には是非オススメしたい。明らかに目的の違うもの、個人用のスペース(ここに日誌を書いたりする)、期間限定のプロジェクトなどを別々の Wiki に分けておくと何かと扱いやすいのだ。3(先に分けても後から分けてもいい。)ところが PukiWiki には複数の Wiki に対して検索する機能がないのでそこが不便。

というかそもそも PukiWiki には WikiFarm の機能がない。複数の Wiki を PukiWiki 自身が管理しているわけじゃないんだから、そら横断検索ってのも無茶な話。そこで Namazu を使う。Namazu では 1Wiki対1インデックスのオーソドックスなインデックスを起こす。で、template で checkbox を用意して、複数のインデックスに対して一気に検索を掛けられるようにする。

おしまい。

いやいや。

この方法にはまだまだ工夫の余地がある。

  • Wiki のパーサを外部(Web ベースでなくコマンドラインが嬉しい)から利用できる API があると、Namazu の filter を書きやすくなって検索精度を上げやすくなる。
    • サイドバーやナビゲーション要素を除いた HTML が取得できるといちばん嬉しい。
    • 今回の PukiWiki 用フィルタは超簡単なパーサもどきを Perl で別途用意したのだが、本当は PukiWiki のエンジンを利用して HTML を生成できればいちばんよかった。
  • DBMS 前提の Wiki だと Namazu と相性が悪いので、Namazu 用に(ってだけでもないけど)ナビゲーション要素などを除いた HTML を取得できる方法があるといいな。

これが実現できるとどんな Wiki を使っていても Wiki の分割と精度の高い横断検索を実現できる。んだけど、Wiki エンジンの開発者やコミュニティでこういうことに意義を感じている人ってあんまり見ないのはなぜだろう。すげー便利なのに。ひょっとして自分の知らないもっといい方法が密かに定着しているのだろうか。

  1. もちろんページの書き方にもよるかもしれない。 

  2. 本当は skin の共有や Wiki 間の移動をどうナビゲートするかまで考えるとまだ手間が掛かるんだけど。 

  3. たださんもそんなことを以前日記に書いていたと思う。 

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm