root / tags / 1.0.8 / xapian-core / docs / synonyms.rst

Revision 9794, 2.9 kB (checked in by olly, 13 months ago)

docs/synonyms.rst: Minor wording clarification.

Line 
1
2.. Copyright (C) 2007 Olly Betts
3
4======================
5Xapian Synonym Support
6======================
7
8.. contents:: Table of contents
9
10Introduction
11============
12
13Xapian provides support for storing a synonym dictionary, or thesaurus.  This
14can be used by the Xapian::QueryParser class to expand terms in user query
15strings, either automatically, or when requested by the user with an explicit
16synonym operator (``~``).
17
18Note that Xapian doesn't offer automated generation of the synonym dictionary.
19
20Model
21=====
22
23The model for the synonym dictionary is that a term or group of consecutive
24terms can have one or more synonym terms.  A group of consecutive terms is
25specified in the dictionary by simply joining them with a single space between
26each one.
27
28QueryParser Integration
29=======================
30
31In order for any of the synonym features of the QueryParser to work, you must
32call ``QueryParser::set_database()`` to specify the database to use.
33
34If ``FLAG_SYNONYM`` is passed to ``QueryParser::parse_query()`` then the
35QueryParser will recognise ``~`` in front of a term as indicating a request for
36synonym expansion.  If ``FLAG_LOVEHATE`` is also specified, you can use ``+``
37and ``-`` before the ``~`` to indicate that you love or hate the synonym
38expanded expression.
39
40A synonym-expanded term becomes the term itself OR-ed with any listed synonyms,
41so ``~truck`` might expand to ``truck OR lorry OR van``.  A group of terms is
42handled in much the same way.
43
44If a term to be synonym expanded will be stemmed by the QueryParser, then
45synonyms will be checked for the unstemmed form first, and then for the stemmed
46form, so you can provide different synonyms for particular unstemmed forms
47if you want to.
48
49If ``FLAG_AUTO_SYNONYMS`` is passed to ``QueryParser::parse_query()`` then the
50QueryParser will automatically expand any term which has synonyms, unless the
51term is in a phrase or similar.
52
53If ``FLAG_AUTO_MULTIWORD_SYNONYMS`` is passed to ``QueryParser::parse_query()``
54then the QueryParser will look at groups of terms separated only by whitespace
55and try to expand them as term groups.  This is done in a "greedy" fashion, so
56the first term which can start a group is expanded first, and the longest group
57starting with that term is expanded.  After expansion, the QueryParser will
58look for further possible expansions starting with the term after the last
59term in the expanded group.
60
61Current Limitations
62===================
63
64Explicit multi-word synonyms
65----------------------------
66
67There ought to be a way to explicitly request expansion of multi-term synonyms,
68probably with the syntax ``~"stock market"``.  This hasn't been implemented
69yet though.
70
71Backend Support
72---------------
73
74Currently synonyms are only supported by flint databases.  They work with a
75single database or multiple databases (use Database::add_database() as usual).
76We've no plans to support them for the deprecated Quartz backend, nor for
77InMemory, but we do intend to support them for the remote backend in the
78future.
Note: See TracBrowser for help on using the browser.