6786: False detection of index names in Search; make index names case insensitive
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>
This commit is contained in:
parent
293a9baba8
commit
cd1fbb7510
13
C4/Search.pm
13
C4/Search.pm
|
|
@ -1072,15 +1072,14 @@ sub buildQuery {
|
|||
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue