| 
<?
 require "demo.inc";
 require "KwIndex.lib";
 
 $limit_contentlength = 10*1024;
 #$limit_numdocs = 10000;
 
 class MyKwIndex extends KwIndex {
 function &document_sub($doc_ids) {
 $docs = array();
 
 # let's select the documents in a single query
 $res = mysql_query("select id, title, content from document ".
 "where id in (".join(',', $doc_ids).")");
 while($row = mysql_fetch_row($res)) {
 $docs[ $row[0] ] = $row[1]." ".$row[2];
 }
 return $docs;
 }
 }
 
 $kw = new MyKwIndex(array(
 "index_name" => "kwindex",
 "hostname" => "localhost",
 
 // from "demo.inc"
 "db_name" => "kwindex_test",
 "username" => $username,
 "password" => $password
 ));
 
 ?>
 
 <title>KwIndex demo</title>
 <h1>KwIndex demo</h1>
 
 
 
 
 
 <? if(!$action) { ?>
 
 <h2>What do you want to do?</h2>
 <ul>
 <li><a href=demo.php?action=add>Add and index a document</li>
 <li><a href=demo.php?action=browse>Browse documents</li>
 <li><a href=demo.php?action=search>Search</a>
 <li><a href=demo.phps>See the source code of this script</a>
 </ul>
 
 <h2>Document and index statistics</h2>
 <ul>
 <li>Total number of documents: <? $res = mysql_query("select count(*) from document"); $row = mysql_fetch_row($res); echo $row[0]; ?>
 <li>Total size of documents: <? $res = mysql_query("select sum(contentlength) from document"); $row = mysql_fetch_row($res); echo $row[0]; ?> bytes
 </ul>
 
 
 
 
 
 
 
 
 <? } elseif($action == 'add') { ?>
 
 <h2>Add and index a document</h2>
 
 <?   if (!$title && !$content) { ?>
 <form method=POST>
 <input type=hidden name=action value=add>
 Title<br><input name=title size=70><br>
 Content<br><textarea name=content cols=70 rows=20></textarea><br>
 <input type=submit>
 </form>
 
 <?   } else { ?>
 
 <?
 
 mysql_query("insert into document (title,content,contentlength) values ('".addslashes($title)."','".addslashes($content)."',".strlen($content).")")
 or die("can't insert: ".mysql_error());
 $id = mysql_insert_id();
 $kw->add_document(array($id))
 or die("can't index: ".$kw->ERROR);
 ?>
 
 Document indexed. Document id = <? echo $id ?>. Content length = <? echo strlen($content) ?>.
 
 <?   } ?>
 
 
 
 
 
 
 
 
 
 <? } elseif($action == 'browse' || $action == 'search') { ?>
 
 <?   if ($action == 'search') { ?>
 <h2>Search</h2>
 <?   } else { ?>
 <h2>Browse documents</h2>
 <?   } ?>
 
 <form method=GET>
 <input type=hidden name=action value=search>
 Search: <input name=words value="<? echo htmlentities($words) ?>">
 Boolean: <select name=boolean><option<? echo $boolean == 'AND' ? " selected":"" ?>>AND<option<? echo $boolean == 'OR' ? " selected":""?>>OR</select>
 Show: <select name=num>
 <option<? echo $num == 10 ? " selected":""?>>10
 <option<? echo $num == 20 ? " selected":""?>>20
 <option<? echo $num == 50 ? " selected":""?>>50
 <option<? echo $num == 100 ? " selected":""?>>100
 </select>
 <input type=submit value=Search>
 </form>
 
 <?   if($action == 'browse' || $action == "search" && $words) { ?>
 <?
 
 if(!isset($start) || preg_match("/\D/", $start) || $start < 0) $start=1;
 if(!isset($num) || preg_match("/\D/", $num) || $num > 100 || $num < 0) $num=20;
 if(!isset($boolean) || $boolean != 'OR') $boolean='AND';
 if(!preg_match("/\S/", $words)) {
 $docs = array();
 if(!($res = mysql_query("select id,mtime,title,content from document limit ".($start-1).",".($num+1))))
 die("can't select: ".mysql_error());
 while($row = mysql_fetch_row($res))
 array_push($docs, $row);
 } else {
 $doc_ids = $kw->search(array('words'=>$words,'num'=>$num+1,'start'=>$start,'boolean'=>$boolean));
 if (!isset($doc_ids))
 die("can't search: ".$kw->ERROR);
 $docs = array();
 if (sizeof($doc_ids)) {
 if(!($res = mysql_query("select id,mtime,title,content from document where id in (".join(',',$doc_ids).")")))
 die("can't select: ".mysql_error());
 while($row = mysql_fetch_row($res))
 array_push($docs, $row);
 }
 }
 
 ?>
 <table border>
 <?   if($start>1) { ?>
 <tr><td colspan=5 align=right><a href=demo.php?action=browse&words=<? echo urlencode($words) ?>&start=<? echo urlencode($start-$num) ?>&num=<? echo urlencode($num) ?>&boolean=<? echo $boolean ?>>Previous</a></td></tr>
 <?   } ?>
 <tr><td>id</td><td>title</td><td>content length</td><td>date</td><td>options</td></tr>
 <?   for($i=0; $i<min($num,sizeof(&$docs)); ++$i) { ?>
 <tr><td><? echo $docs[$i][0] ?></td><td><a href=demo.php?action=view&id=<? echo $docs[$i][0] ?>><? echo htmlentities($docs[$i][2]) ?></td><td><? echo strlen($docs[$i][3]) ?></td><td><? echo $docs[$i][1] ?></a></td><td><a href=demo.php?action=delete&id=<? echo $docs[$i][0] ?>>delete</a></tr>
 <?   } ?>
 <?   if(sizeof($docs) > $num) { ?>
 <tr><td colspan=5 align=right><a href=demo.php?action=browse&words=<? echo urlencode($words) ?>&start=<? echo urlencode($start+$num) ?>&num=<? echo urlencode($num) ?>&boolean=<? echo $boolean ?>>Next</a></td></tr>
 <?   } ?>
 
 
 
 
 
 
 
 
 <?   } ?>
 <? } elseif($action == 'view') { ?>
 
 <h2>View document</h2>
 
 <?   if($id) { ?>
 <?
 
 $res = mysql_query("select title,content from document where id='".addslashes($id)."'");
 $row = mysql_fetch_row($res);
 
 if ($row) {
 echo "<h3>Title</h3>\n\n",htmlentities($row[0]),"\n\n<h3>Content</h3>\n\n",htmlentities($row[1]),"\n\n";
 }
 ?>
 <?   } ?>
 
 
 
 
 
 
 
 
 
 <? } elseif($action == 'delete') { ?>
 
 <h2>Delete document</h2>
 
 <?
 
 if(mysql_query("delete from document where id='".addslashes($id)."'")) {
 echo "Article id=".htmlentities($id)." has been deleted.";
 } else {
 echo "Can't delete: ".mysql_error();
 }
 
 if(!$kw->remove_document($id)) {
 echo "Index for article id=".htmlentities($id)." has been removed.";
 } else {
 echo "Can't remove article index: ".$kw->ERROR;
 }
 
 ?>
 
 
 
 
 
 
 
 
 <? } ?>
 <hr>
 <a href=http://steven.haryan.to/php/KwIndex.html>KwIndex page</a>
 
 |