From 10d03b9737d22c65f44b55a8e7157fa7748dd8ba Mon Sep 17 00:00:00 2001 From: Fridolyn SOMERS Date: Fri, 17 May 2013 14:03:37 +0200 Subject: [PATCH] Bug 10271: fix searching using an index containing "ns" or "nb" When an index does not contain a structure part, the structure "wrdl" is automatically added and a structure is mandatory to build search query (to convert ':' into '='). But the code that tests that the structure is not already defined looks in entire index string : $index =~ /(st-|phr|ext|wrdl|nb|ns)/ It should look for a comma followed by a structure and in the case of "nb" and "ns" look for an exact match. The consequence is that an index containing ns or nb or phr or etc does not work. This patch modifies the regexp for this part and other parts looking at structures into index. Test plan : - Desactivate all searching sysprefs. - Create a new index called "ansa" number 8999 into bib1.att, ccl.properties and records.abs - Index a biblio with a value on this index, ie "VALUE" - Perform a search on this index by editing URL: http:///cgi-bin/koha/catalogue/search.pl?idx=ansa&q=VALUE => Without patch, the search does not work. The PQF query is "@and ansa: VALUE" => With patch, the search works. The PQF query is "@attr 1=8999 VALUE"; - Perform same test with an index containing a structure ie "aphra" - Set QueryAutoTruncate syspref to automatically => Check * is added to operand : PQF query is "@attr 1=8999 @attr 4=6 @attr 5=1 VALUE" - You may check stopwords removal but this feature is obsolete Signed-off-by: Bernardo Gonzalez Kriegel Comment: as far as I can test, this works. Small tab error reported by koha-qa, fixed in a followup. This kind of patch is difficult to test without explicit instructions, not everyone knows how to check what kind of PQF search is used. I don't know. But I can test search results. Test: 1) Deactivate search sysprefs QueryAutoTruncate = only if * is added QueryFuzzy = Don't try QueryStemming = Don't try QueryWeightFields = Disable UseQueryParser = Do not try 2) Create new index 'ansa' bib1.att : att 8999 ansa ccl.properties : ansa 1=8999 records.abs : melm 999 ansa:w,ansa:p 1) and 2) from comment 3 on Bug 3) In the undestanding that index refers to field 999, edited default framework, made 999a visible on editor 4) Edit sample record, add 'VALUE' to 999a, save, reindex 5) Search with /cgi-bin/koha/catalogue/search.pl?idx=ansa&q=VALUE No results 6) Apply patch, repeat search Got results That's all I can test. If not enough for QA, then this must wait until further and explicit test instructions Signed-off-by: Kyle M Hall There is (for MARC21, at least), an exising indexes that this patch fixes: Code-institution. Signed-off-by: Galen Charlton (cherry picked from commit e17abe0e2891cc420581ebe998e1c8444ba844d3) Signed-off-by: Tomas Cohen Arazi --- C4/Search.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index 2abc1212ce..f03c86f590 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -751,7 +751,7 @@ sub _remove_stopwords { my @stopwords_removed; # phrase and exact-qualified indexes shouldn't have stopwords removed - if ( $index !~ m/phr|ext/ ) { + if ( $index !~ m/,(phr|ext)/ ) { # remove stopwords from operand : parse all stopwords & remove them (case insensitive) # we use IsAlpha unicode definition, to deal correctly with diacritics. @@ -1386,7 +1386,7 @@ sub buildQuery { # Set default structure attribute (word list) my $struct_attr = q{}; - unless ( $indexes_set || !$index || $index =~ /(st-|phr|ext|wrdl|nb|ns)/ ) { + unless ( $indexes_set || !$index || $index =~ /,(st-|phr|ext|wrdl)/ || $index =~ /^(nb|ns)$/ ) { $struct_attr = ",wrdl"; } @@ -1404,7 +1404,7 @@ sub buildQuery { } if ($auto_truncation){ - unless ( $index =~ /(st-|phr|ext)/ ) { + unless ( $index =~ /,(st-|phr|ext)/ ) { #FIXME only valid with LTR scripts $operand=join(" ",map{ (index($_,"*")>0?"$_":"$_*") -- 2.39.5