[Koha-devel] Understanding Zebra SRU
David Cook
dcook at prosentient.com.au
Thu Apr 21 05:22:57 CEST 2016
Hi all,
Who all is using SRU with Zebra? I know that Marcel has been interested in
Zebra's SRU since at least 2009, but information is a bit bare out there.
I recently received an off-list email asking about Zebra and SRU, especially
relevance searching and sorting. I admitted that I only knew about Zebra's
Z39.50 functionality, so naturally I started looking into SRU and CQL.
I found this webpage to be extremely helpful (alas I only found it after a
day or two of experimentation):
https://www.loc.gov/standards/sru/cql/spec.html
I started by experimenting with CQL in yaz-client. That's as simple as
"querytype cql" and "set_cqlfile
/home/koha/koha-dev/etc/zebradb/pqf.properties".
It took a few minutes to get me head around pqf.properties and that it
defaults to using the "dc" set. For all other sets like "bath", you have to
prefix with the set name (e.g. bath.name).
Z> find title=brand
Sent searchRequest.
Received SearchResponse.
Search was a success.
Number of hits: 12, setno 1
SearchResult-1: term=brand cnt=12
records returned: 0
Elapsed: 0.019602
Z> find bath.name=randy
Sent searchRequest.
Received SearchResponse.
Search was a success.
Number of hits: 2, setno 2
SearchResult-1: term=randy cnt=2
records returned: 0
Elapsed: 0.020180
I seem to be able to get relevance ranking with the following (= is the
relation, and relevant is the relation modifier):
Z> find title=/relevant brand
Sent searchRequest.
Received SearchResponse.
Search was a success.
Number of hits: 12, setno 9
SearchResult-1: term=brand cnt=12
records returned: 0
Elapsed: 0.001049
Then a A-Z title sort with the following:
Z> find title=brand sortby title/sort.ascending
Sent searchRequest.
Received SearchResponse.
Search was a success.
Number of hits: 12, setno 11
SearchResult-1: term=brand cnt=12
records returned: 0
Elapsed: 0.001210
So that's CQL in yaz-client, and you can use SRU or Z39.50 for the same
result there.
So I made the following change to my koha-conf.xml:
<!-- <listen id="biblioserver"
>unix:/home/koha/koha-dev/var/run/zebradb/bibliosocket</listen> -->
<listen id="biblioserver" >tcp:@:9999</listen>
Restarted Zebra and started making SRU requests:
wget
"http://localhost:9999/biblios?version=1.1&operation=searchRetrieve&query=ti
tle cql.eq brand&startRecord=1&maximumRecords=10&recordSchema=marcxml"
Records in ascending order by biblionumber
wget
"http://localhost:9999/biblios?version=1.1&operation=searchRetrieve&query=ti
tle cql.eq brand sortBy
dc.title/sort.ascending&startRecord=1&maximumRecords=10&recordSchema=marcxml
"
Records in ascending order by dc.title
wget
"http://localhost:9999/biblios?version=1.1&operation=searchRetrieve&query=ti
tle cql.eq/relevant
brand&startRecord=1&maximumRecords=10&recordSchema=marcxml"
Records in descending order by relevance. This one can be harder to test at
a glance. but "format xml" and "elements zebra::meta" will reveal the
relevance score of our records in yaz-client!
Z> find any=/relevant brand
Sent searchRequest.
Received SearchResponse.
Search was a success.
Number of hits: 12, setno 10
SearchResult-1: term=brand cnt=12
records returned: 0
Elapsed: 0.001298
Z> format xml
Z> elements zebra::meta
Z> show 1
Sent presentRequest (1+1).
Records: 1
Record type: XML
<record xmlns="http://www.indexdata.com/zebra/" sysno="153" base="biblios"
file="/tmp/2LUzuP3K56/upd_biblio/exported_records"
type="dom./home/koha/koha-dev/etc/zebradb/biblios/etc/dom-config.xml"
score="631" rank="0" size="2881" set="zebra::meta"/>
nextResultSetPosition = 2
Elapsed: 0.028276
Z>
Sent presentRequest (2+1).
Records: 1
Record type: XML
<record xmlns="http://www.indexdata.com/zebra/" sysno="50" base="biblios"
file="/tmp/2LUzuP3K56/upd_biblio/exported_records"
type="dom./home/koha/koha-dev/etc/zebradb/biblios/etc/dom-config.xml"
score="612" rank="0" size="2570" set="zebra::meta"/>
nextResultSetPosition = 3
Elapsed: 0.000612
You'd think that "rank" would provide useful info, but I think that just
relates to static rank (see
http://www.indexdata.com/zebra/doc/special-retrieval.html). Score is what we
want here. Note that score appears to only appear for relevance queries.
Anyway. I hope that info is useful to some of you, and I'd be curious if
others have any neat tips for using SRU. I don't know if I'll be using it
any time soon, but it's interesting to think about, even in anticipation of
ElasticSearch.
David Cook
Systems Librarian
Prosentient Systems
72/330 Wattle St
Ultimo, NSW 2007
Office: 02 9212 0899
Direct: 02 8005 0595
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.koha-community.org/pipermail/koha-devel/attachments/20160421/2b35aab0/attachment.html>
More information about the Koha-devel
mailing list