On Tue, 2003-10-21 at 15:22, rikona wrote:
> Hello Jack,
...
> 
> JC> swish-e looks great and is on my to-try list.
> 
> This does look good, and better than any suggestions made when I asked
> earlier. Thanks. The part that I missed right away when I tried the
> demo was the ability to do proximity searches ((search or find)
> [within 25 words of] (script and text)). This is a very powerful
> capability that I have come to like a lot. The demos also did not like
> complex nested expressions, and did not do them correctly, although
> the documentation said it did seem to use regex, which I didn't try.
> 
> The other thing I like about DTsearch is the great number of formats
> it can index, and then display in an integrated viewer. I can scroll
> through 15 different formats, seeing the contents of each one, as fast
> as I can press a key. In a very large document, the viewer also shows
> each occurrence of the search word(s), and you can scroll through them
> from find to find very easily. The integrated viewer is VERY nice.
> 
> Is there a way to get the output of swish-e to operate as an
> 'integrated viewer'?
> 

I don't know for sure, but I think that Nautilus or Konqueror would fit
the bill there. Both have intense MIME capabilities.

> JC> ht::dig is kinda lame, but generally works.
> 
> This was suggested earlier. Not a candidate.
> 
> JC> if your data is in a database or can get there, finding or writing
> JC> a search interface from your favorite language is really not hard.
> 
> Are you suggesting the full DTsearch capabilities are easy to do? If
> so, tell me more. :-) It would be a very nice addition to open source
> programs, IMHO.
> 

that viewer sounds tough, but here's a two function CGI web search
interface that uses MS-SQL as its backend:
sub ParsifySearchString ($) {
        my ($input_string) = @_;
        my @search_strings;
        my $search_string = '';
        my $quote_marker = 0;
        @search_strings = split (/\s+/, $input_string);
        foreach my $string (@search_strings) {
            # MS-SQL chokes on these
            if ($string =~
/\bis\b|\bof\b|\bbecause\b|\bwas\b|\bmany\b|\btoo\b|\bfor\b|\bwhile\b|\bthe\b|\ba\b|\ban\b|\bthis\b|\bthose\b|\bthese\b|\bthem\b|\bme\b/i)
 {
                    next;
            }
            if ($string =~ /\band\b|\bor\b|\bnot\b/i) {
                $search_string .= $string." ";
                next;
            }
            if ($string =~ /\"/ && $quote_marker == 0) {
                $search_string .= $string." ";
                $quote_marker = 1;
                next;
            }
            if ($string =~ /\"/ && $quote_marker == 1) {
                $search_string .= $string." ";
                $quote_marker = 0;
                next;
            }
            if ($quote_marker == 1) {
                $search_string .= $string." ";
            } else {
                $search_string .= "\"".$string."\" ";
            }
        }
        chop $search_string;
        $search_string =~ s/^\s|\"\"//;
        $search_string =~ s/\" \"/\" AND \"/g;
        $search_string =~ s/(\w+\") not (\"\w)/$1 AND NOT $2/i;
        push(@search_strings, $search_string);
        return @search_strings;
}
sub SearchDB ($) {
        my ($cgi) = @_;
        # get the input query 
        my $input_string = $cgi->param('search');
        my @search_strings = &ParsifySearchString($input_string);
        my $search_string = pop(@search_strings);
        my $query = "SELECT
Rank,ticket_id,subject,who,time_incoming,contents FROM
CONTAINSTABLE(support_emails, *, '$search_string') AS ct JOIN
support_emails AS e ON ct.[KEY] = e.id WHERE Rank > 0 ORDER BY
ticket_id";
        my $ticket_test = 0;

        # Start the web page
        print $cgi->header(-type => 'text/html');
        print $cgi->start_html(
                           -title => "Search Results: $search_string",
                           -bgcolor => '#ffffff',
                           );
        #print "<h1>$search_string</h1>";
        if (!$search_string) {print "<B>Unable to process query, please
try again.</B>\n"; exit(1);}
        # Keep the whole table in output so it can be used from other
pages.
        my $output = "<TABLE BORDER=1 BGCOLOR=\"#c0c0c0\">\n";
        $output .= "<TR><TD ALIGN=\"CENTER\"><H2><A
HREF=\"http://...\";>Support Web Home</A></H2>";
        $output .= "<FORM METHOD=POST
ACTION=\"/cgi-bin/supportWeb.pl\">";
        $output .= "<INPUT TYPE=\"hidden\" name=\"page\"
value=\"search\">";
        $output .= "<INPUT SIZE=15 name=search value=\"\">";
        $output .= "<INPUT TYPE=submit value=\"Search Tickets\">";
        $output .= "<br></form></TD></TR>\n";
        $output .= "<TR><TD ALIGN=\"CENTER\">Searched the Support
database for <B>$search_string</B>.<BR>\n";
        # $output .= "<FONT SIZE=\"-3\">$query.</FONT></TD>";
        $output .= "</TR></TABLE><P>\n<TABLE BORDER=1
BGCOLOR=\"#6a8d9c\" CELLPADDING=5 FONT SIZE=\"-1\">\n";
        $output .=
"<TR><TD><B>TICKET</B></TD><TD><B>SUBJECT</B></TD><TD><B>AUTHOR</B></TD><TD><B>TIME</B></TD></TR>\n";

        $dbh->do("set textsize 20000000");
        my $sth = $dbh->prepare($query) or print "Unable to prepare
query ($query): ".$dbh->errstr;
        $sth->execute or print "Unable to execute query ($query):
".$dbh->errstr;
        # Stuff the results into our table
        while (my @row = $sth->fetchrow_array) {
                my
($rank,$ticket_id,$subject,$who,$time_incoming,$contents) = @row;
                if ($ticket_id != $ticket_test) {
                   $output .= "<TR><TD><A
HREF=\"/cgi-bin/supportWeb.pl?thread=$ticket_id\">$ticket_id</A></TD><TD>$subject</TD><TD>$who</TD><TD>$time_incoming</TD></TR>\n";
                   # Parse and print the message contents
                   my $msg_summary="\n";
                   $contents =~ s/</&lt;/g;
                   $contents =~ s/>/&gt;/g;
                   my @contents = split(/\r?\n/,$contents);
                   foreach my $line (@contents) {
                       foreach my $string (@search_strings) {
                               if ($string =~ /\band\b|\bor\b|\bnot\b/)
{
                                       next;
                               }
                               if ($line =~ /$string/i) {
                                  $msg_summary .= LineWrap($line."\n");
                               }
                       }
                   }
                   $output .= "<TR><TD COLSPAN=4
BGCOLOR=\"#FFFFEF\"><PRE>$msg_summary</PRE></TD></TR>";
                }
                $ticket_test = $ticket_id;
}
        $sth->finish;
        $output .= "</TABLE>\n";

        # print the goods
        print $output;
        # close the web page
        print $cgi->end_html;
        exit(0);
}

> Thanks for the info.
-- 
Jack Coates
Monkeynoodle: A Scientific Venture...


Want to buy your Pack or Services from MandrakeSoft? 
Go to http://www.mandrakestore.com

Reply via email to