/[MITgcm]/mitgcm.org/devel/buildweb/pkg/swish-e/perl/test.pl
ViewVC logotype

Contents of /mitgcm.org/devel/buildweb/pkg/swish-e/perl/test.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Fri Sep 20 19:47:30 2002 UTC (22 years, 10 months ago) by adcroft
Branch: Import, MAIN
CVS Tags: baseline, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
Importing web-site building process.

1 #!/usr/local/bin/perl -w
2
3 use strict;
4
5 =pod
6 Test script for the SWISHE library
7
8 please see perldoc README-PERL for more information
9 $Id: test.pl,v 1.13 2002/08/22 22:58:38 whmoseley Exp $
10 =cut
11
12 # Import symbols from the SWISHE.pm module
13 use SWISHE;
14
15
16 # In this test we will use the same index twice
17 # The results will seem odd since normally you would use
18 # two different index files, but it demonstrates
19 # how to process two index files.
20
21 my $indexfilename1 = '../tests/test.index';
22 my $indexfilename2 = $indexfilename1;
23
24 die "Index file '$indexfilename1' not found! Did you run make test from the top level directory?\n"
25 unless -e $indexfilename1;
26
27 my $indexfiles = $indexfilename1;
28
29
30 # To search for several indexes just put them together
31 # Uncomment to test/demonstrate the use of two index files
32
33 #my $indexfiles = "$indexfilename1 $indexfilename2";
34
35
36 # First, open the index files.
37 # This reads in headers and prepares the index for searching
38 # You can run more than one query once the index is opened.
39
40
41 my $handle = SwishOpen( $indexfiles )
42 or die "Failed to SwishOpen '$indexfiles'";
43
44 # Get a few headers from the index files for display
45
46 my @headers = ( qw/WordCharacters BeginCharacters EndCharacters IndexedOn FileCount FuzzyIndexingMode/ );
47
48 for my $header ( @headers ) {
49 print_header("Header '$header'");
50
51 my @h = SwishHeaderParameter( $handle, $header );
52
53 print "$header for index $_ is $h[$_]\n" for 0..$#h;
54 }
55
56
57 # Now, let's run a few queries...
58
59 # Define a few searches
60
61
62
63 my @searches = (
64 {
65 title => 'Normal search',
66 query => 'test',
67 props => '',
68 sort => '',
69 context => 1, # Search the entire file
70 },
71 {
72 title => 'MetaTag search 1',
73 query => 'meta1=metatest1',
74 props => 'meta1 meta2 meta3',
75 sort => '',
76 context => 1, # Search the entire file
77 },
78 {
79 title => 'MetaTag search 2',
80 query => 'meta2=metatest2',
81 props => 'meta1 meta2 meta3',
82 sort => '',
83 context => 1, # Search the entire file
84 },
85 {
86 title => 'XML Search',
87 query => 'meta3=metatest3',
88 props => 'meta1 meta2 meta3',
89 sort => '',
90 context => 1, # Search the entire file
91 },
92 {
93 title => 'Phrase Search',
94 query => '"three little pigs"',
95 props => 'meta1 meta2 meta3',
96 sort => '',
97 context => 1, # Search the entire file
98 },
99 {
100 title => 'Advanced search',
101 query => 'test or meta1=m* or meta2=m* or meta3=m*',
102 props => 'meta1 meta2 meta3',
103 sort => '',
104 context => 1, # Search the entire file
105 },
106 {
107 title => 'Advanced search',
108 query => 'test or meta1=m* or meta2=m* or meta3=m*',
109 props => 'meta1 meta2 meta3',
110 sort => '',
111 context => 1, # Search the entire file
112 },
113 {
114 title => 'Limit to title',
115 query => 'test or meta1=m* or meta2=m* or meta3=m*',
116 props => 'meta1 meta2 meta3 swishrank swishdocpath swishlastmodified',
117 sort => '',
118 context => 1, # Search the entire file
119 limit => [ 'swishtitle', '<=', 'If you are seeing this, the test' ],
120 },
121 {
122 title => 'Limit to title - second test with same query',
123 query => 'test or meta1=m* or meta2=m* or meta3=m*',
124 props => 'meta1 meta2 meta3 swishrank swishdocpath swishlastmodified',
125 sort => '',
126 context => 1, # Search the entire file
127 limit => [ 'swishtitle', '<=', 'If you are seeing this, the test' ],
128 },
129 );
130
131 # Need an array in perl to deliver the above hash contents to swish in
132 # the correct order
133 my @settings = qw/query context props sort/;
134
135
136
137 print_header("*** Now searching ****");
138 print "Note that some META names have embedded newlines.\n";
139
140
141 # Use an array for a hash slice when reading results. See SwishNext below.
142 my @labels = qw/
143 rank
144 file_name
145 title
146 content_length
147 /;
148
149
150 for my $search ( @searches ) {
151 print_header( "$search->{title} - Query: '$search->{query}'" );
152
153
154 # Since we *might* use SetLimitParameter, make sure it's reset first
155 ClearLimitParameter( $handle );
156
157 if ( $search->{limit} ) {
158 print "limiting to @{$search->{limit}}\n\n";
159 SetLimitParameter( $handle, ,@{$search->{limit}});
160 }
161
162 # Here's the actual query
163
164 my $num_results = SwishSearch( $handle, @{$search}{ @settings } );
165
166 print "# Number of results = $num_results\n\n";
167
168 if ( $num_results <= 0 ) {
169 print ($num_results ? SwishErrorString( $num_results ) : 'No Results');
170
171 my $error = SwishError( $handle );
172 print "\nError number: $error\n" if $error;
173
174 next;
175 }
176
177 my %result;
178 my @properties = split /\s+/, $search->{props};
179 my %props;
180
181 while ( ( @result{ @labels }, @props{@properties} ) = SwishNext( $handle )) {
182
183 for ( @labels ) {
184 printf(" %20s -> '%s'\n", $_ ,$result{$_});
185 }
186 for ( @properties ) {
187 printf(" %20s:(%-20s) -> '%s'\n", 'Property', $_, $props{$_} || '<blank>' );
188 }
189 print "-----------\n";
190 }
191 }
192
193 print_header('Other Functions');
194
195
196 # Now, demonstrate the use of SwishStem to find the stem of a word.
197
198 my @stemwords = qw/parking libaries library librarians money monies running runs is/;
199 print "\nStemming:\n";
200 print " '$_' => '" . ( SwishStem( $_ ) || 'returned undefined: Word not stemmed for some reason' ) . "'\n" for @stemwords;
201 print "\n";
202
203
204
205 # Grab the stop words from the header
206
207 my @stopwords = SwishStopWords( $handle, $indexfilename1 );
208 print 'Stopwords: ',
209 ( @stopwords ? join(', ', @stopwords) : '** None **' ),
210 "\n\n";
211
212
213 # Let's see what words in the index begin with the letter "t".
214
215 my $letter = 't';
216 my @keywords = SwishWords( $handle, $indexfilename1, $letter);
217
218 print "List of keywords that start with the letter '$letter':\n",
219 join("\n", @keywords),
220 "\n\n";
221
222
223
224 # Free the memory.
225
226 SwishClose( $handle );
227
228 # If swish was built with memory debugging this will dump extra info
229 SWISHE::MemSummary();
230
231
232 sub print_header {
233 print "\n", '-' x length( $_[0] ),"\n",
234 $_[0],
235 "\n", '-' x length( $_[0] ),"\n";
236 }
237
238

  ViewVC Help
Powered by ViewVC 1.1.22