Updates for first-in-field support + alwaysmathces searches. Refer to native
[idzebra-moved-to-github.git] / doc / introduction.xml
1 <chapter id="introduction">
2  <!-- $Id: introduction.xml,v 1.40 2006-09-22 12:34:45 adam Exp $ -->
3  <title>Introduction</title>
4  
5  <section id="overview">
6   <title>Overview</title>
7   
8   <para>
9    <ulink url="http://indexdata.dk/zebra/">Zebra</ulink>
10    is a high-performance, general-purpose structured text
11    indexing and retrieval engine. It reads records in a
12    variety of input formats (eg. email, XML, MARC) and provides access
13    to them through a powerful combination of boolean search
14    expressions and relevance-ranked free-text queries.
15   </para>
16
17   <para>
18    Zebra supports large databases (tens of millions of records,
19    tens of gigabytes of data). It allows safe, incremental
20    database updates on live systems. Because Zebra supports
21    the industry-standard information retrieval protocol, Z39.50,
22    you can search Zebra databases using an enormous variety of
23    programs and toolkits, both commercial and free, which understand
24    this protocol.  Application libraries are available to allow
25    bespoke clients to be written in Perl, C, C++, Java, Tcl, Visual
26    Basic, Python, PHP and more - see the
27    <ulink url="&url.zoom;">ZOOM web site</ulink>
28    for more information on some of these client toolkits.
29   </para>
30
31   <para>
32    This document is an introduction to the Zebra system. It explains
33    how to compile the software, how to prepare your first database,
34    and how to configure the server to give you the
35    functionality that you need.
36   </para>
37  </section>
38  
39  <section id="features">
40   <title>Features</title>
41   
42   <para>
43    This is an overview of some of Zebra's most important features:
44   </para>
45   
46   <para>
47    <itemizedlist>
48
49     <listitem>
50      <para>
51       Very large databases: logical files can be
52       automatically partitioned over multiple disks.
53      </para>
54     </listitem>
55
56     <listitem>
57      <para>
58       Arbitrarily complex records.  The internal data format
59       is a structured format conceptually similar to XML or GRS-1,
60       which allows lists, nested structured data elements and
61       variant forms of data.
62      </para>
63     </listitem>
64
65     <listitem>
66      <para>
67       Robust updating - records can be added and deleted ``on the fly''
68       without rebuilding the index from scratch.
69       Records can be safely updated even while users are accessing
70       the server.
71       The update procedure is tolerant to crashes or hard interrupts
72       during database updating - data can be reconstructed following
73       a crash.
74      </para>
75     </listitem>
76
77     <listitem>
78      <para>
79       Configurable to understand many input formats.
80       A system of input filters driven by
81       regular expressions allows most ASCII-based
82       data formats to be easily processed.
83       SGML, XML, ISO2709 (MARC), and raw text are also
84       supported.
85      </para>
86     </listitem>
87
88     <listitem>     
89      <para>
90       Searching supports a powerful combination of boolean queries as
91       well as relevance-ranking (free-text) queries.  Truncation,
92       masking, full regular expression matching and "approximate
93       matching" (eg. spelling mistakes) are all handled.
94      </para>
95     </listitem>
96
97     <listitem>
98       <para>
99         Index-only databases: data can be, and usually is, imported
100         into Zebra's own storage, but Zebra can also refer to
101         external files, building and maintaining indexes of "live"
102         collections.
103       </para>
104     </listitem>
105
106     <listitem>
107      <para>
108       Zebra is written in portable C, so it runs on most Unix-like systems 
109       as well as Windows (NT/2000/2003).  A binary distribution for Windows 
110       is available at
111       <ulink url="&url.idzebra.download.win32;"/>,
112       and pre-built packages are available for 
113       <!--- some Linux
114       distributions:
115       Red Hat 7.x RPMs at
116       <ulink url="http://ftp.indexdata.dk/pub/zebra/RedHat7.X/"/>
117       and Debian packages at
118       -->
119       <literal>GNU/Debian Linux</literal> at 
120       <ulink url="&url.idzebra.download.debian;"/>.
121      </para>
122     </listitem>
123     
124    </itemizedlist>
125    
126   </para>
127   
128   <para>
129      <ulink url="&url.z39.50;">Z39.50</ulink> protocol support:
130   </para>
131   
132   <para>   
133    <itemizedlist>
134     <listitem>
135      <para>
136       Protocol facilities: Init, Search, Present (retrieval),
137       Segmentation (support for very large records), Delete, Scan
138       (index browsing), Sort, Close and support for the ``update''
139       Extended Service to add or replace an existing XML record.
140      </para>
141     </listitem>
142
143     <listitem>
144      <para>
145       Piggy-backed presents are honored in the search request - that
146       is, a subset of the found records can be returned directly with
147       a search response, enabling search and retrieval to happen in a
148       single round-trip.
149      </para>
150     </listitem>
151
152     <listitem>
153      <para>
154       Named result sets are supported.
155      </para>
156     </listitem>
157
158     <listitem>
159      <para>
160       Easily configured to support different application profiles, with
161       tables for attribute sets, tag sets, and abstract syntaxes.
162       Additional tables control facilities such as element mappings to
163       different schema (eg., GILS-to-USMARC).
164      </para>
165     </listitem>
166
167     <listitem>
168      <para>
169       Complex composition specifications using Espec-1 (partial support).
170       Element sets are defined using the Espec-1 capability,
171       and are specified in configuration files as simple element
172       requests (and, optionally, variant requests).
173      </para>
174     </listitem>
175
176     <listitem>
177      <para>
178       Multiple record syntaxes
179       for data retrieval: GRS-1, SUTRS,
180       XML, ISO2709 (MARC), etc. Records can be mapped between record syntaxes
181       and schemas on the fly.      
182      </para>
183     </listitem>
184
185    </itemizedlist>
186    
187   </para>
188
189   
190   <para>
191     <ulink url="&url.sru;">SRU</ulink> Web Service support:
192   </para>
193   <para>   
194    <itemizedlist>
195     <listitem>
196      <para>
197        The protocol operations <literal>explain</literal>, 
198        <literal>searchRetrieve</literal> and <literal>scan</literal>
199        are supported. 
200      </para>
201     </listitem>
202     <listitem>
203      <para>
204        <ulink url="&url.cql;">CQL</ulink> to internal query model RPN 
205        conversion is supported. 
206      </para>
207     </listitem>
208     <listitem>
209      <para>
210        Multiple XML record formats
211       for data retrieval are supported, modelled over the  GRS-1, SUTRS,
212       MARC record formats. Records can be mapped between record
213        schemas on the fly. Arbitrarily complex XSLT transformations
214       can be applied during record retrieval if one uses the 
215        <literal>alvis</literal> filter module.
216      </para>
217     </listitem>
218      <listitem>
219       <para>
220        Extended RPN queries for search/retrieve and scan are supported,
221        for controlling approximate hit counts, etc.
222      </para>
223      </listitem>
224
225    </itemizedlist>
226    
227   </para>
228
229   
230  </section>
231  
232   <section id="introduction-apps">
233   <title>References and Zebra based Applications</title>
234   <para>
235    Zebra has been deployed in numerous applications, in both the
236    academic and commercial worlds, in application domains as diverse
237    as bibliographic catalogues, geospatial information, structured
238    vocabulary browsing, government information locators, civic
239    information systems, environmental observations, museum information
240    and web indexes.
241   </para>
242   <para>
243    Notable applications include the following:
244   </para>
245
246
247   <section id="koha-ils">
248    <title>Koha free open-source ILS</title>
249    <para>
250      <ulink url="http://www.koha.org/">Koha</ulink> is a full-featured
251      open-source ILS, initially developed  in 
252      New Zealand by Katipo Communications Ltd, and first deployed in
253      January of 2000 for Horowhenua Library Trust. It is currently
254      maintained by a team of software providers and library technology
255      staff from around the globe. 
256     </para>
257     <para>
258      <ulink url="http://liblime.com/">LibLime</ulink>, 
259      a company that is marketing and supporting Koha, adds in
260      the new release of Koha 3.0 the Zebra
261      database server to drive its bibliographic database.
262     </para>
263     <para>
264      In early 2005, the Koha project development team began looking at
265      ways to improve MARC support and overcome scalability limitations
266      in the Koha 2.x series. After extensive evaluations of the best
267      of the Open Source textual database engines - including MySQL
268      full-text searching, PostgreSQL, Lucene and Plucene - the team
269      selected Zebra. 
270     </para>
271     <para>
272      "Zebra completely eliminates scalability limitations, because it
273      can support tens of millions of records." explained Joshua
274      Ferraro, LibLime's Technology President and Koha's Project
275      Release Manager. "Our performance tests showed search results in
276      under a second for databases with over 5 million records on a
277      modest i386 900Mhz test server." 
278     </para>
279     <para>
280      "Zebra also includes support for true boolean search expressions
281      and relevance-ranked free-text queries, both of which the Koha
282      2.x series lack. Zebra also supports incremental and safe
283      database updates, which allow on-the-fly record
284      management. Finally, since Zebra has at its heart the Z39.50
285      protocol, it greatly improves Koha's support for that critical
286      library standard." 
287     </para>
288     <para> 
289      Although the bibliographic database will be moved to Zebra, Koha
290      3.0 will continue to use a relational SQL-based database design
291      for the 'factual' database. "Relational database managers have
292      their strengths, in spite of their inability to handle large
293      numbers of bibliographic records efficiently," summed up Ferraro,
294      "We're taking the best from both worlds in our redesigned Koha
295      3.0. 
296      </para>
297      <para>
298      See also LibLime's newsletter article
299       <ulink url="http://www.liblime.com/newsletter/2006/01/features/koha-earns-its-stripes/">
300      Koha Earns its Stripes</ulink>.
301      </para>
302    </section>
303
304   <section id="emilda-ils">
305    <title>Emilda open source ILS</title>
306    <para>
307      <ulink url="http://www.emilda.org/">Emilda</ulink> 
308      is a complete Integrated Library System, released under the 
309      GNU General Public License. It has a
310      full featured Web-OPAC, allowing comprehensive system management
311      from virtually any computer with an Internet connection, has
312      template based layout allowing anyone to alter the visual
313      appearance of Emilda, and is
314      XML based language for fast and easy portability to virtually any
315      language.
316      Currently, Emilda is used at three schools in Espoo, Finland.
317     </para>
318     <para>
319      As a surplus, 100% MARC compatibility has been achieved using the
320     Zebra Server from Index Data as backend server. 
321     </para> 
322    </section>
323
324   <section id="reindex-ils">
325    <title>ReIndex.Net web based ILS</title>
326     <para>
327      <ulink url="http://www.reindex.net/index.php?lang=en">Reindex.net</ulink>
328      is a netbased library service offering all
329      traditional functions on a very high level plus many new
330      services. Reindex.net is a comprehensive and powerful WEB system
331      based on standards such as XML and Z39.50.
332      updates. Reindex supports MARC21, danMARC eller Dublin Core with
333      UTF8-encoding.  
334     </para>
335     <para>
336      Reindex.net runs on GNU/Debian Linux with Zebra and Simpleserver
337      from Index 
338      Data for bibliographic data. The relational database system
339      Sybase 9 XML is used for
340      administrative data. 
341      Internally MARCXML is used for bibliographical records. Update
342      utilizes Z39.50 extended services. 
343     </para>
344    </section>
345
346    <section id="dads-article-database">
347     <title>DADS - the DTV Article Database
348      Service</title>
349     <para>
350     DADS is a huge database of more than ten million records, totalling
351     over ten gigabytes of data.  The records are metadata about academic
352     journal articles, primarily scientific; about 10% of these
353     metadata records link to the full text of the articles they
354     describe, a body of about a terabyte of information (although the
355     full text is not indexed.)
356    </para>
357    <para>
358     It allows students and researchers at DTU (Danmarks Tekniske
359     Universitet, the Technical College of Denmark) to find and order
360     articles from multiple databases in a single query.  The database
361     contains literature on all engineering subjects.  It's available
362     on-line through a web gateway, though currently only to registered
363     users.
364    </para>
365    <para>
366     More information can be found at
367     <ulink url="http://www.dtv.dk/"/> and
368     <ulink url="http://dads.dtv.dk"/>
369    </para>
370   </section>
371
372   <section id="infonet-eprints">
373    <title>Infonet Eprints</title>
374    <para>
375      The InfoNet Eprints service from the 
376      <ulink url="http://www.dtv.dk/">
377       Technical Knowledge Center of Denmark</ulink>
378      provides access to documents stored in
379      eprint/preprint servers and institutional research archives around
380      the world. The service is based on Open Archives Initiative metadata
381      harvesting of selected scientific archives around the world. These
382      open archives offer free and unrestricted access to their contents.
383     </para>
384    <para>
385     Infonet Eprints currently holds 1.4 million records from 16 archives.
386     The online search facility is found at
387     <ulink url="http://preprints.cvt.dk"/>.
388    </para>
389   </section>
390
391   <section id="alvis-project">
392    <title>Alvis</title>
393    <para>
394      The <ulink url="http://www.alvis.info/alvis/">Alvis</ulink> EU
395      project run under the 6th Framework (IST-1-002068-STP)
396      is building a semantic-based peer-to-peer search engine. A
397      consortium of eleven partners from six different European
398      Community countries plus Switzerland and China contribute
399      with expertise in a broad range of specialties including network
400      topologies, routing algorithms, linguistic analysis and
401      bioinformatics. 
402     </para>
403     <para>
404      The Zebra information retrieval indexing machine is used inside
405      the Alvis framework to
406      manage huge collections of natural language processed and
407      enhanced XML data, coming from a topic relevant web crawl.
408      In this application, Zebra swallows and manages 37GB of XML data
409      in about 4 hours, resulting in search times of fractions of
410      seconds. 
411      </para>
412    </section>
413
414
415   <section id="uls">
416    <title>ULS (Union List of Serials)</title>
417    <para>
418     The M25 Systems Team
419     has created a union catalogue for the periodicals of the
420     twenty-one constituent libraries of the University of London and
421     the University of Westminster
422     (<ulink url="http://www.m25lib.ac.uk/ULS/"/>).
423     They have achieved this using an
424     unusual architecture, which they describe as a
425     ``non-distributed virtual union catalogue''.
426    </para>
427    <para>
428     The member libraries send in data files representing their
429     periodicals, including both brief bibliographic data and summary
430     holdings.  Then 21 individual Z39.50 targets are created, each
431     using Zebra, and all mounted on the single hardware server.
432     The live service provides a web gateway allowing Z39.50 searching
433     of all of the targets or a selection of them.  Zebra's small
434     footprint allows a relatively modest system to comfortably host
435     the 21 servers.
436    </para>
437    <para>
438     More information can be found at
439     <ulink url="http://www.m25lib.ac.uk/ULS/"/>
440    </para>
441   </section>
442
443   <section id="nli">
444    <title>NLI-Z39.50 - a Natural Language Interface for Libraries</title>
445    <para>
446     Fernuniversit&#x00E4;t Hagen in Germany have developed a natural
447     language interface for access to library databases.
448     <!-- <ulink
449     url="http://ki212.fernuni-hagen.de/nli/NLIintro.html"/> -->
450     In order to evaluate this interface for recall and precision, they
451     chose Zebra as the basis for retrieval effectiveness.  The Zebra
452     server contains a copy of the GIRT database, consisting of more
453     than 76000 records in SGML format (bibliographic records from
454     social science), which are mapped to MARC for presentation.
455    </para>
456    <para>
457     (GIRT is the German Indexing and Retrieval Testdatabase.  It is a
458     standard German-language test database for intelligent indexing
459     and retrieval systems.  See
460     <ulink url="http://www.gesis.org/forschung/informationstechnologie/clef-delos.htm"/>)
461    </para>
462    <para>
463     Evaluation will take place as part of the TREC/CLEF campaign 2003 
464     <ulink url="http://clef.iei.pi.cnr.it"/>.
465     <!-- or <ulink url="http://www4.eurospider.ch/CLEF/"/> -->
466    </para>
467    <para>
468     For more information, contact Johannes Leveling
469     <email>Johannes.Leveling@FernUni-Hagen.De</email>
470    </para>
471   </section>
472
473   <section id="various-web-indexes">
474    <title>Various web indexes</title>
475    <para>
476     Zebra has been used by a variety of institutions to construct
477     indexes of large web sites, typically in the region of tens of
478     millions of pages.  In this role, it functions somewhat similarly
479     to the engine of google or altavista, but for a selected intranet
480     or a subset of the whole Web.
481    </para>
482    <para>
483     For example, Liverpool University's web-search facility (see on
484     the home page at
485     <ulink url="http://www.liv.ac.uk/"/>
486     and many sub-pages) works by relevance-searching a Zebra database
487     which is populated by the Harvest-NG web-crawling software.
488    </para>
489    <para>
490     For more information on Liverpool university's intranet search
491     architecture, contact John Gilbertson
492     <email>jgilbert@liverpool.ac.uk</email>
493    </para>
494    <para>
495     Kang-Jin Lee
496     has recently modified the Harvest web indexer to use Zebra as
497     its native repository engine.  His comments on the switch over
498     from the old engine are revealing:
499     <blockquote>
500      <para>
501       The first results after some testing with Zebra are very
502       promising.  The tests were done with around 220,000 SOIF files,
503       which occupies 1.6GB of disk space.
504      </para>
505      <para>
506       Building the index from scratch takes around one hour with Zebra
507       where [old-engine] needs around five hours.  While [old-engine]
508       blocks search requests when updating its index, Zebra can still
509       answer search requests.
510       [...]
511       Zebra supports incremental indexing which will speed up indexing
512       even further.
513      </para>
514      <para>
515       While the search time of [old-engine] varies from some seconds
516       to some minutes depending how expensive the query is, Zebra
517       usually takes around one to three seconds, even for expensive
518       queries.
519       [...]
520       Zebra can search more than 100 times faster than [old-engine]
521       and can process multiple search requests simultaneously
522      </para>
523      <para>
524       I am very happy to see such nice software available under GPL.
525      </para>
526     </blockquote>
527    </para>
528   </section>
529  </section>
530   
531   
532   <section id="introduction-support">
533    <title>Support</title>
534    <para>
535     You can get support for Zebra from at least three sources.
536    </para>
537    <para>
538     First, there's the Zebra web site at
539     <ulink url="&url.idzebra;"/>,
540      which always has the most recent version available for download.
541      If you have a problem with Zebra, the first thing to do is see
542      whether it's fixed in the current release.
543    </para>
544    <para>
545     Second, there's the Zebra mailing list.  Its home page at
546     <ulink url="&url.idzebra.mailinglist;"/>
547      includes a complete archive of all messages that have ever been
548      posted on the list.  The Zebra mailing list is used both for
549      announcements from the authors (new
550      releases, bug fixes, etc.) and general discussion.  You are welcome
551      to seek support there.  Join by filling the form on the list home page.
552    </para>
553    <para>
554     Third, it's possible to buy a commercial support contract, with
555     well defined service levels and response times, from Index Data.
556     See
557     <ulink url="&url.indexdata.support;"/>
558      for details.
559    </para>
560   </section>  
561
562
563  <section id="future">
564   <title>Future Directions</title>
565   
566   <para>
567    These are some of the plans that we have for the software in the near
568    and far future, ordered approximately as we expect to work on them.
569   </para>
570   
571   <para>
572    <itemizedlist>
573
574     <listitem>
575      <para>
576        Improved support for XML in search and retrieval. Eventually,
577        the goal is for Zebra to pull double duty as a flexible
578        information retrieval engine and high-performance XML
579        repository.  The recent addition of XPath searching is one
580        example of the kind of enhancement we're working on.
581      </para>
582      <para>
583        There is also the experimental <literal>ALVIS XSLT</literal>
584        XML input filter, which unleashes the full power of DOM based
585        XSLT transformations during indexing and record retrieval. Work
586        on this filter has been sponsored by the ALVIS EU project
587        <ulink url="http://www.alvis.info/alvis/"/>. We expect this filter to
588        mature soon, as it is planned to be included in the version 2.0
589        release of Zebra. 
590      </para>
591     </listitem>
592
593     <listitem>
594      <para>
595        Finalisation and documentation of Zebra's C programming
596        API, allowing updates, database management and other functions
597        not readily expressed in Z39.50.  We will also consider
598        exposing the API through SOAP.
599      </para>
600     </listitem>
601
602     <listitem>
603      <para>
604        Improved free-text searching. We're first and foremost octet jockeys and
605        we're actively looking for organisations or people who'd like
606        to contribute experience in relevance ranking and text
607        searching.
608      </para>
609     </listitem>
610
611    </itemizedlist>
612   </para>
613   
614   <para>
615    Programmers thrive on user feedback. If you are interested in a
616    facility that you don't see mentioned here, or if there's something
617    you think we could do better, please drop us a mail.  Better still,
618    implement it and send us the patches.
619   </para>
620   <para>
621    If you think it's all really neat, you're welcome to drop us a line
622    saying that, too. You can email us on
623    <email>info@indexdata.dk</email>
624    or check the contact info at the end of this manual.
625   </para>
626   
627  </section>
628 </chapter>
629  <!-- Keep this comment at the end of the file
630  Local variables:
631  mode: sgml
632  sgml-omittag:t
633  sgml-shorttag:t
634  sgml-minimize-attributes:nil
635  sgml-always-quote-attributes:t
636  sgml-indent-step:1
637  sgml-indent-data:t
638  sgml-parent-document: "zebra.xml"
639  sgml-local-catalogs: nil
640  sgml-namecase-general:t
641  End:
642  -->