Fix Harvest-NG reference to Harvest (vanilla); credit Peter Popovics for the Perl...
[idzebra-moved-to-github.git] / doc / introduction.xml
1 <chapter id="introduction">
2  <!-- $Id: introduction.xml,v 1.23 2002-12-02 15:11:49 mike Exp $ -->
3  <title>Introduction</title>
4  
5  <sect1>
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
27    <ulink url="http://zoom.z3950.org/">the 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  </sect1>
38  
39  <sect1 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.  A binary distribution for Windows NT is
110       available at
111       <ulink url="http://ftp.indexdata.dk/pub/zebra/win32/"/>,
112       and pre-built packages are available for some Linux
113       distributions:
114       Red Hat 7.x RPMs at
115       <ulink url="http://ftp.indexdata.dk/pub/zebra/RedHat7.X/"/>
116       and Debian packages at
117       <ulink url="http://ftp.indexdata.dk/pub/zebra/debian/"/>
118      </para>
119     </listitem>
120     
121    </itemizedlist>
122    
123   </para>
124   
125   <para>
126    Z39.50 protocol support:
127   </para>
128   
129   <para>   
130    <itemizedlist>
131     <listitem>
132      <para>
133       Protocol facilities: Init, Search, Present (retrieval),
134       Segmentation (support for very large records), Delete, Scan
135       (index browsing), Sort, Close and support for the ``update''
136       Extended Service to add or replace an existing XML record.
137         <!-- Adam says:
138              * Supported
139              You can insert/delete/replace an XML record given an
140              "external" ID.  Actually this way of doing ES Update was
141              meant for an OAI application that Ian Ibbotson had in
142              mind to implement. The "update" command in YAZ client
143              implements this on the client side. My plan is to make
144              this available in ZOOM "extended" soon..
145         -->
146      </para>
147     </listitem>
148
149     <listitem>
150      <para>
151       Piggy-backed presents are honored in the search request - that
152       is, a subset of the found records can be returned directly with
153       a search response, enabling search and retrieval to happen in a
154       single round-trip.
155      </para>
156     </listitem>
157
158     <listitem>
159      <para>
160       Named result sets are supported.
161      </para>
162     </listitem>
163
164     <listitem>
165      <para>
166       Easily configured to support different application profiles, with
167       tables for attribute sets, tag sets, and abstract syntaxes.
168       Additional tables control facilities such as element mappings to
169       different schema (eg., GILS-to-USMARC).
170      </para>
171     </listitem>
172
173     <listitem>
174      <para>
175       Complex composition specifications using Espec-1 (partial support).
176       Element sets are defined using the Espec-1 capability,
177       and are specified in configuration files as simple element
178       requests (and, optionally, variant requests).
179      </para>
180     </listitem>
181
182     <listitem>
183      <para>
184       Multiple record syntaxes
185       for data retrieval: GRS-1, SUTRS,
186       XML, ISO2709 (MARC), etc. Records can be mapped between record syntaxes
187       and schemas on the fly.      
188      </para>
189     </listitem>
190
191    </itemizedlist>
192    
193   </para>
194   
195  </sect1>
196  
197   <sect1 id="apps">
198   <title>Applications</title>
199   <para>
200    Zebra has been deployed in numerous applications, in both the
201    academic and commercial worlds, in application domains as diverse
202    as bibliographic catalogues, geospatial information, structured
203    vocabulary browsing, government information locators, civic
204    information systems, environmental observations, museum information
205    and web indexes.
206   </para>
207   <para>
208    Notable applications include the following:
209   </para>
210
211   <sect2>
212    <title>DADS - the DTV Article Database Service</title>
213    <para>
214     DADS is a huge database of more than ten million records, totalling
215     over ten gigabytes of data.  The records are metadata about academic
216     journal articles, primarily scientific; about 10% of these
217     metadata records link to the full text of the articles they
218     describe, a body of about a terabyte of information (although the
219     full text is not indexed.)
220    </para>
221    <para>
222     It allows students and researchers at DTU (Danmarks Tekniske
223     Universitet, the Technical College of Denmark) to find and order
224     articles from multiple databases in a single query.  The database
225     contains literature on all engineering subjects.  It's available
226     on-line through a web gateway, though currently only to registered
227     users.
228    </para>
229    <para>
230     More information can be found at
231     <ulink url="http://www.dtv.dk/help/dads/index_e.htm"/>
232    </para>
233   </sect2>
234
235   <sect2>
236    <title>NLI-Z39.50 - a Natural Language Interface for Libraries</title>
237    <para>
238     Fernuniversit&#x00E4;t Hagen in Germany have developed a natural
239     language interface for access to library databases.
240     <ulink url="http://ki212.fernuni-hagen.de/nli/NLIintro.html"/>
241     In order to evaluate this interface for recall and precision, they
242     chose Zebra as the basis for retrieval effectiveness.  The Zebra
243     server contains a copy of the GIRT database, consisting of more
244     than 76000 records in SGML format (bibliographic records from
245     social science), which are mapped to MARC for presentation.
246    </para>
247    <para>
248     (GIRT is the German Indexing and Retrieval Testdatabase.  It is a
249     standard German-language test database for intelligent indexing
250     and retrieval systems.  See
251     <ulink url="http://www.gesis.org/forschung/informationstechnologie/clef-delos.htm"/>)
252    </para>
253    <para>
254     Evaluation will take place as part of the TREC/CLEF campaign 2003 
255     <ulink url="http://clef.iei.pi.cnr.it or http://www4.eurospider.ch/CLEF/"/>
256    </para>
257    <para>
258     For more information, contact Johannes Leveling
259     <email>Johannes.Leveling@FernUni-Hagen.De</email>
260    </para>
261   </sect2>
262
263   <sect2>
264    <title>ULS (Union List of Serials)</title>
265    <para>
266     The M25-Link systems team
267     (<ulink url="http://www.m25lib.ac.uk/M25link/"/>)
268     are involved in a project called ULS to provide a union catalogue
269     for periodicals in 21 member libraries.  They do this with an
270     unusual architecture which they call a
271     ``non-distributed virtual union catalogue''.
272    </para>
273    <para>
274     The member libraries send in data files representing their
275     periodicals, including both brief bibliographic data and summary
276     holdings.  Then 21 individual Z39.50 targets are created, each
277     using Zebra, and all mounted on the single hardware server.
278     The live service provides a web gateway allowing Z39.50 searching
279     of all of the targets or a selection of them.  Zebra's small
280     footprint allows a relatively modest system to comfortably host
281     the 21 servers.
282    </para>
283    <para>
284     More information can be found at
285     <ulink url="http://www.m25lib.ac.uk/ULS/"/>
286    </para>
287   </sect2>
288
289   <sect2>
290    <title>Various web indexes</title>
291    <para>
292     Zebra has been used by a variety of institutions to construct
293     indexes of large web sites, typically in the region of tens of
294     millions of pages.  In this role, it functions somewhat similarly
295     to the engine of google or altavista, but for a selected intranet
296     or a subset of the whole Web.
297    </para>
298    <para>
299     For example, Liverpool University's web-search facility (see on
300     the home page at
301     <ulink url="http://www.liv.ac.uk/"/>
302     and many sub-pages) works by relevance-searching a Zebra database
303     which is populated by the Harvest-NG web-crawling software.
304    </para>
305    <para>
306     For more information on Liverpool university's intranet search
307     architecture, contact John Gilbertson
308     <email>jgilbert@liverpool.ac.uk</email>
309    </para>
310    <para>
311     Kang-Jin Lee
312     <email>lee@arco.de</email>,
313     has recently modified the Harvest web indexer to use Zebra as
314     its native repository engine.  His comments on the switch over
315     from the old engine are revealing:
316     <blockquote>
317      <para>
318       The first results after some testing with Zebra are very
319       promising.  The tests were done with around 220,000 SOIF files,
320       which occupies 1.6GB of disk space.
321      </para>
322      <para>
323       Building the index from scratch takes around one hour with Zebra
324       where [old-engine] needs around five hours.  While [old-engine]
325       blocks search requests when updating its index, Zebra can still
326       answer search requests.
327       [...]
328       Zebra supports incremental indexing which will speed up indexing
329       even further.
330      </para>
331      <para>
332       While the search time of [old-engine] varies from some seconds
333       to some minutes depending how expensive the query is, Zebra
334       usually takes around one to three seconds, even for expensive
335       queries.
336       [...]
337       Zebra can search more than 100 times faster than [old-engine]
338       and can process multiple search requests simultaneously
339      </para>
340      <para>
341       I am very happy to see such nice software available under GPL.
342      </para>
343     </blockquote>
344    </para>
345   </sect2>
346  </sect1>
347
348
349  <sect1 id="support">
350   <title>Support</title>
351   <para>
352    You can get support for Zebra from at least three sources.
353   </para>
354   <para>
355    First, there's the Zebra web site at
356    <ulink url="http://indexdata.dk/zebra/"/>,
357    which always has the most recent version available for download.
358    If you have a problem with Zebra, the first thing to do is see
359    whether it's fixed in the current release.
360   </para>
361   <para>
362    Second, there's the Zebra mailing list.  Its home page at
363    <ulink url="http://indexdata.dk/mailman/listinfo/zebralist"/>
364    includes a complete archive of all messages that have ever been
365    posted on the list.  The Zebra mailing list is used both for
366    announcements from the authors (new
367    releases, bug fixes, etc.) and general discussion.  You are welcome
368    to seek support there.  Join by sending email to
369    <email>zebra-request@indexdata.dk</email> with the word
370    <literal>subscribe</literal> in the body of the message.
371   </para>
372   <para>
373    Third, it's possible to buy a commercial support contract, with
374    well defined service levels and response times, from Index Data.
375    See
376    <ulink url="http://indexdata.dk/support2/"/>
377    for details.
378   </para>
379  </sect1>  
380
381
382  <sect1 id="future">
383   <title>Future Directions</title>
384   
385   <para>
386    These are some of the plans that we have for the software in the near
387    and far future, ordered approximately as we expect to work on them.
388   </para>
389   
390   <para>
391    <itemizedlist>
392
393     <listitem>
394      <para>
395        Improved support for XML in search and retrieval. Eventually,
396        the goal is for Zebra to pull double duty as a flexible
397        information retrieval engine and high-performance XML
398        repository.  The recent addition of XPath searching is one
399        example of the kind of enhancement we're working on.
400      </para>
401     </listitem>
402
403     <listitem>
404      <para>
405        Access to the search engine through SOAP/RPC API to allow the
406        construction of applications without requiring Z39.50 tools.
407        This will shortly be available by means of Index Data's
408        SRW-to-Z39.50 gateway, currently in beta test.
409      </para>
410     </listitem>
411
412     <listitem>
413      <para>
414        Finalisation and documentation of Zebra's C programming
415        API, allowing updates, database management and other functions
416        not readily expressed in Z39.50.  We will also consider
417        exposing the API through SOAP.
418      </para>
419     </listitem>
420
421     <listitem>
422      <para>
423        Support for the use of Perl both for access to the Zebra API
424        and for building extension ``plug-ins'' such as input filters.
425        The code for this has been contributed to the source tree by
426        Peter Popovics
427        <email>pop@indexdata.dk</email>,
428        and is in the process of being integrated and tested.
429      </para>
430     </listitem>
431
432     <listitem>
433      <para>
434        Improved free-text searching. We're first and foremost octet jockeys and
435        we're actively looking for organisations or people who'd like
436        to contribute experience in relevance ranking and text
437        searching.
438      </para>
439     </listitem>
440
441    </itemizedlist>
442   </para>
443   
444   <para>
445    Programmers thrive on user feedback. If you are interested in a
446    facility that you don't see mentioned here, or if there's something
447    you think we could do better, please drop us a mail.  Better still,
448    implement it and send us the patches.
449   </para>
450   <para>
451    If you think it's all really neat, you're welcome to drop us a line
452    saying that, too. You can email us on
453    <email>info@indexdata.dk</email>
454    or check the contact info at the end of this manual.
455   </para>
456   
457  </sect1>
458 </chapter>
459  <!-- Keep this comment at the end of the file
460  Local variables:
461  mode: sgml
462  sgml-omittag:t
463  sgml-shorttag:t
464  sgml-minimize-attributes:nil
465  sgml-always-quote-attributes:t
466  sgml-indent-step:1
467  sgml-indent-data:t
468  sgml-parent-document: "zebra.xml"
469  sgml-local-catalogs: nil
470  sgml-namecase-general:t
471  End:
472  -->