Fixing the regex to detect index names in ccl queries. Changing loop
structure: looping through the index candidates in the query is faster than
testing every index name with a regex. Making the index comparison case
insensitive will benefit users misspelling the case of an index; Zebra does not
care about it. Test the change by searching on a word followed by a : or =
character. Previously, when that word contained an index name like an or nb,
the search would crash.
Signed-off-by: Frédéric Demians <f.demians@tamil.fr>
Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
Perltidied the new block to fix indentation
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
my $stopwords_removed; # flag to determine if stopwords have been removed
- my $cclq;
+ my $cclq = 0;
my $cclindexes = getIndexes();
- if( $query !~ /\s*ccl=/ ){
- for my $index (@$cclindexes){
- if($query =~ /($index)(,?\w)*[:=]/){
- $cclq = 1;
- }
+ if ( $query !~ /\s*ccl=/ ) {
+ while ( !$cclq && $query =~ /(?:^|\W)(\w+)(,\w+)*[:=]/g ) {
+ my $dx = lc($1);
+ $cclq = grep { lc($_) eq $dx } @$cclindexes;
}
- $query = "ccl=$query" if($cclq);
+ $query = "ccl=$query" if $cclq;
}
# for handling ccl, cql, pqf queries in diagnostic mode, skip the rest of the steps