[prev in list] [next in list] [prev in thread] [next in thread]
List: fossil-users
Subject: Re: [fossil-users] implementing search
From: Stephen De Gabrielle <stephen.degabrielle () acm ! org>
Date: 2010-05-26 13:51:02
Message-ID: AANLkTikJCFidHfFJdMijckPImRjPxbgjI7xgVLRJWLr3 () mail ! gmail ! com
[Download RAW message or body]
http://www.greenstone.org/manuals/mgpp_user.pdf
describes mg++ the s&r appliance embedded in greenstone
might interest you
cheers,
stephen
On Sunday, May 16, 2010, <zachtodd@cis-partners.com> wrote:
> I'm making a first pass at implementing code/tickets/wiki search. Anybody working \
> on something similar? If you have any thoughts on functionality, implementation, \
> or anything else, let me know.
> diff -rupN fossil_src_orig/src/db.c fossil2/src/db.c
> --- fossil_src_orig/src/db.c 2010-03-18 10:20:53.000000000 -0400
> +++ fossil2/src/db.c 2010-05-16 12:11:18.796282921 -0400
> @@ -1040,6 +1040,22 @@ static void db_sql_user(
> }
> }
>
> +static void db_sql_content_get(
> + sqlite3_context *context,
> + int argc,
> + sqlite3_value **argv
> +){
> + int rid;
> + Blob content;
> +
> + if( argc != 1 ) return;
> + rid = sqlite3_value_int(argv[0]);
> + content_get(rid, &content);
> + sqlite3_result_text(context, blob_str(&content), -1, SQLITE_TRANSIENT);
> +}
> +
> +
> +
> /*
> ** Implement the cgi() SQL function. cgi() takes a an argument which is
> ** a name of CGI query parameter. The value of that parameter is returned,
> @@ -1156,6 +1172,7 @@ LOCAL void db_connection_init(void){
> sqlite3_create_function(g.db, "cgi", 1, SQLITE_ANY, 0, db_sql_cgi, 0, 0);
> sqlite3_create_function(g.db, "cgi", 2, SQLITE_ANY, 0, db_sql_cgi, 0, 0);
> sqlite3_create_function(g.db, "print", -1, SQLITE_UTF8, 0,db_sql_print,0,0);
> + sqlite3_create_function(g.db, "content_get", 1, SQLITE_ANY, 0, \
> db_sql_content_get, 0, 0); sqlite3_create_function(
> g.db, "file_is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
> );
> diff -rupN fossil_src_orig/src/search.c fossil2/src/search.c
> --- fossil_src_orig/src/search.c 2010-03-18 10:20:53.000000000 -0400
> +++ fossil2/src/search.c 2010-05-16 17:18:59.343032875 -0400
> @@ -172,6 +172,61 @@ void search_sql_setup(Search *p){
> }
>
> /*
> +** WEBPAGE: search
> +** URL: /search
> +*/
> +void search(void){
> + const char *zType;
> + const char *zContent;
> + const char *zSrch;
> + const char *zUuid;
> + char zrn[4];
> + char zshUuid[10];
> + int zScore;
> + int zRid;
> +
> + Search *zSrchpat;
> + Stmt q;
> +
> + zSrch = PD("search", "");
> + zSrchpat = search_init(zSrch);
> + search_sql_setup(zSrchpat);
> +
> + db_prepare(&q, "SELECT type, rid, content, score(content) AS score FROM "
> + "(SELECT 'code' as type, rid as rid, content_get(rid) as \
> content FROM " + "(SELECT rid FROM vfile)) ORDER BY score \
> DESC"); +
> + style_header("Search");
> + @ <table>
> + @ <tr>
> + @ <td bgcolor='red'>code</td>
> + @ <td bgcolor='green'>tickets</td>
> + @ <td bgcolor='blue'>wiki</td>
> + @ </tr>
> + @ </table>
> + @ <table border=1>
> + @ <tr><td>link</td><td>relevance</td><td>type</td></tr>
> + while (db_step(&q) == SQLITE_ROW){
> + zType = db_column_text(&q, 0);
> + zRid = db_column_int(&q, 1);
> + zContent = db_column_text(&q, 2);
> + zScore = db_column_int(&q, 3);
> + sprintf(zrn, "%i", zScore);
> + if (zScore > 0){
> + if (strcmp(zType, "code") == 0){
> + zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", zRid);
> + strncpy(zshUuid, zUuid, 10);
> +
> + @ <tr><td><a \
> href='/artifact?name=%h(zUuid)'>%h(zshUuid)</td><td>%h(zrn)</td><td>%h(zType)</td></tr>
> + }
> + }
> + }
> + @ </table>
> + db_finalize(&q);
> + style_footer();
> +}
> +
> +/*
> ** Testing the search function.
> **
> ** COMMAND: search
> diff -rupN fossil_src_orig/src/skins.c fossil2/src/skins.c
> --- fossil_src_orig/src/skins.c 2010-03-18 10:20:53.000000000 -0400
> +++ fossil2/src/skins.c 2010-05-15 13:43:35.326471185 -0400
> @@ -183,6 +183,12 @@ static const char zBuiltinSkin1[] =
> @ }
> @ </th1></nobr></div>
> @ </div>
> +@ <div class="header">
> +@ <form action="/search" method="post">
> +@ <input type="text" name="search" size=20/>
> +@ <input type="submit" value="Search"/>
> +@ </form>
> +@ </div>
> @ <div class="mainmenu"><th1>
> @ html "<a href=''$baseurl$index_page''>Home</a> "
> @ if {[anycap jor]} {
> diff -rupN fossil_src_orig/src/style.c fossil2/src/style.c
> --- fossil_src_orig/src/style.c 2010-03-18 10:20:53.000000000 -0400
> +++ fossil2/src/style.c 2010-05-15 13:45:25.581470950 -0400
> @@ -208,6 +208,12 @@ const char zDefaultHeader[] =
> @ }
> @ </th1></nobr></div>
> @ </div>
> +@ <div class="header">
> +@ <form action="/search" method="post">
> +@ <input type="text" name="search" size=20/>
> +@ <input type="submit" value="Search"/>
> +@ </form>
> +@ </div>
> @ <div class="mainmenu"><th1>
> @ html "<a href='$baseurl$index_page'>Home</a> "
> @ if {[anycap jor]} {
>
>
>
>
> _______________________________________________
> fossil-users mailing list
> fossil-users@lists.fossil-scm.org
> http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
>
--
--
Stephen De Gabrielle
stephen.degabrielle@acm.org
Telephone +44 (0)20 85670911
Mobile +44 (0)79 85189045
http://www.degabrielle.name/stephen
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic