#! /usr/bin/ruby require 'cgi' require 'tokyocabinet' include TokyoCabinet DBPATH = "/home/mikio/casket.tct" cgi = CGI::new scriptname = cgi.script_name expr = cgi.params["expr"][0] docs = [] if expr && expr.length > 0 tdb = TDB::new tdb.open(DBPATH) tqry = TDBQRY::new(tdb) tqry.addcond("title", TDBQRY::QCFTSEX, expr) tqry.setorder("title", TDBQRY::QOSTRASC) tqry.setlimit(30, 0) bqry = TDBQRY::new(tdb) bqry.addcond("body", TDBQRY::QCFTSEX, expr) bqry.setorder("title", TDBQRY::QOSTRASC) bqry.setlimit(30, 0) res = tqry.metasearch([ bqry ], TDBQRY::MSUNION) res.each do |pkey| break if(docs.length >= 30) cols = tdb.get(pkey) if cols kwic = bqry.kwic(cols, nil, 20, TDBQRY::KWMUCTRL) cols["kwic"] = kwic docs.push(cols) end end tdb.close() end xexpr = expr ? CGI::escapeHTML(expr) : "" print(cgi.header({ "charset" => "UTF-8" })) print <<__EOS Tiny Search by Ruby

Tiny Search by Ruby

__EOS if docs.size > 0 printf("
\n") docs.each do |cols| url = cols["url"] url = "." if(!url) title = cols["title"] title = "(untitled)" if(!title) printf("
%s
\n", CGI::escapeHTML(url), CGI::escapeHTML(title)) kwic = cols["kwic"] if kwic cnt = 0 kwic.each do |text| break if (cnt += 1) > 3 text = CGI::escapeHTML(text) text = text.gsub(/\x02/, "") text = text.gsub(/\x03/, "") printf("
%s
\n", text) end end end printf("
\n") end print <<__EOS __EOS