[Koha-devel] Searching URLs in Zebra

David Cook dcook at prosentient.com.au
Tue Jan 19 05:40:03 CET 2016


Sorry to spam you all.

 

The following works:

 

$QParser = C4::Context->queryparser if
(C4::Context->preference('UseQueryParser') && ! ( grep { $_->{'index'} =~
m/\w,\w/ } @{ $self->{'matchpoints'} }));

 

We might want to actually double-check other places in Koha where we're
checking for 'UseQueryParser', as it might not always be possible to use the
QueryParser due to limitations such as the "qualifier,qualifier" CCL syntax.

 

David Cook

Systems Librarian

Prosentient Systems

72/330 Wattle St, Ultimo, NSW 2007

 

From: David Cook [mailto:dcook at prosentient.com.au] 
Sent: Tuesday, 19 January 2016 3:31 PM
To: 'Koha Devel' <koha-devel at lists.koha-community.org>
Subject: RE: Searching URLs in Zebra

 

Ah, just realized again that qq($QParser = C4::Context->queryparser if
(C4::Context->preference('UseQueryParser') && ! ($query =~
m/\w,\w|\w=\w/));) won't work in C4::Matcher because there's no $query.

 

The only equivalent of that would be to check all the $matchpoint->{'index'}
fields in the $self->{'matchpoints'} arrayref. 

 

Which we might have to do because the QueryParser doesn't seem to be able to
handle the "index,phr" (ie "qualifier,qualifier") format. That's verified by
the fact that C4::Search::SimpleSearch is doing that regex. 

 

Sure, we could just not use a list of qualifiers for a Record Matching Rule
index, but then we have no control over what index register we're using and
that's also a problem.

 

 

David Cook

Systems Librarian

Prosentient Systems

72/330 Wattle St, Ultimo, NSW 2007

 

From: David Cook [mailto:dcook at prosentient.com.au] 
Sent: Tuesday, 19 January 2016 3:11 PM
To: 'Koha Devel' <koha-devel at lists.koha-community.org
<mailto:koha-devel at lists.koha-community.org> >
Subject: Searching URLs in Zebra

 

Hey brains trust,

 

I'm reaching out to everyone as I'm a bit stuck with
http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=15541 at the
moment.

 

There's currently no way to search an index with the "url" (ie "u")
register.  A URL is stored "as is" in that index, but all our Koha search
methods use s/:/=/g or s/=/:/g and that plays havoc with the URLs used in a
search query, which makes the match fail against the indexed URL. 

 

C4::Matcher::get_matches() strips spaces and punctuation, so I've added a
"none" or "raw" normalizer that performs no normalization, but
C4::Search::SimpleSearch() does that global replacement for ":" and "="
(depending on your QueryParser settings and what qualifiers you've specified
in your Record Matching Rules).

 

I thought about adding a "skip normalization" flag to
C4::Search::SimpleSearch, but that doesn't work because C4::Matcher uses :
for QueryParser and = for non-QueryParser. except C4::Search::SimpleSearch()
deactivates QueryParser mode if you have a "index,phr" set of qualifiers.
which means that you get a ":" when you need a "=" for the non-QueryParser
CCL query.

 

I suppose the solution might be the following:

 

Current Matcher.pm:

$QParser = C4::Context->queryparser if
(C4::Context->preference('UseQueryParser'));

 

Current Search.pm

$QParser = C4::Context->queryparser if
(C4::Context->preference('UseQueryParser') && ! ($query =~ m/\w,\w|\w=\w/));

 

Future Matcher.pm:

$QParser = C4::Context->queryparser if
(C4::Context->preference('UseQueryParser') && ! ($query =~ m/\w,\w|\w=\w/));

 

If I just have that conditional the same in both Search.pm and Matcher.pm.
then maybe a "skip_normalization" flag in SimpleSearch() would work.

 

I might try that in a minute. but opening it up because I could really use a
hand with this.

 

David Cook

Systems Librarian

Prosentient Systems

72/330 Wattle St, Ultimo, NSW 2007

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.koha-community.org/pipermail/koha-devel/attachments/20160119/78ca1ff9/attachment.html>


More information about the Koha-devel mailing list