File: install-xapian.html

package info (click to toggle)
cyrus-imapd 3.12.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 60,540 kB
  • sloc: ansic: 280,382; perl: 146,834; javascript: 9,624; sh: 5,730; yacc: 2,660; cpp: 2,263; makefile: 2,103; lex: 675; xml: 621; awk: 303; python: 273; asm: 262
file content (215 lines) | stat: -rw-r--r-- 14,599 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Xapian for searching &mdash; Cyrus IMAP 3.12.1 documentation</title>
      <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
      <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
      <link rel="stylesheet" href="../../_static/graphviz.css" type="text/css" />
      <link rel="stylesheet" href="../../_static/cyrus.css" type="text/css" />
  
        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/jquery.js"></script>
        <script src="../../_static/underscore.js"></script>
        <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
        <script src="../../_static/doctools.js"></script>
        <script src="../../_static/sphinx_highlight.js"></script>
    <script src="../../_static/js/theme.js"></script>
    <link rel="index" title="Index" href="../../genindex.html" />
    <link rel="search" title="Search" href="../../search.html" />
    <link rel="next" title="Namespaces: a developer view" href="namespaces.html" />
    <link rel="prev" title="JMAP support" href="jmap.html" /> 
</head>

<body class="wy-body-for-nav"> 
  <div class="wy-grid-for-nav">
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search" >

          
          
          <a href="../../index.html" class="icon icon-home">
            Cyrus IMAP
          </a>
              <div class="version">
                3.12.1
              </div>
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>
        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
              <p class="caption" role="heading"><span class="caption-text">Cyrus IMAP</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../download.html">Download</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../quickstart.html">Quickstart Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../overview.html">Overview</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../setup.html">Setup</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../operations.html">Operations</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../developers.html">Developers</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../contribute.html">We need your help</a></li>
<li class="toctree-l2"><a class="reference internal" href="documentation.html">Contribute docs</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../developer.html">Contribute code and tests</a><ul class="current">
<li class="toctree-l3 current"><a class="reference internal" href="../developer.html#getting-started">Getting Started</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="process.html">Development Process</a></li>
<li class="toctree-l4"><a class="reference internal" href="overview.html">Overview of Cyrus development environment</a></li>
<li class="toctree-l4"><a class="reference internal" href="github-guide.html">GitHub guide</a></li>
<li class="toctree-l4"><a class="reference internal" href="compiling.html">Compiling</a></li>
<li class="toctree-l4"><a class="reference internal" href="../installing.html">Installing Cyrus</a></li>
<li class="toctree-l4"><a class="reference internal" href="developer-testing.html">Developer Test Environment</a></li>
<li class="toctree-l4"><a class="reference internal" href="coverage.html">Test Coverage</a></li>
<li class="toctree-l4"><a class="reference internal" href="jmap.html">JMAP support</a></li>
<li class="toctree-l4 current"><a class="current reference internal" href="#">Xapian for searching</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../developer.html#system-files-and-databases">System files and Databases</a></li>
<li class="toctree-l3"><a class="reference internal" href="../developer.html#resources">Resources</a></li>
<li class="toctree-l3"><a class="reference internal" href="../developer.html#releasing">Releasing</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="cyrusworks.html">Cyrus.Works</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../developers.html#cyrus-internals">Cyrus Internals</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../developers.html#unit-tests">Unit Tests</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../support.html">Support/Community</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Cyrus SASL</span></p>
<ul>
<li class="toctree-l1"><a class="reference external" href="http://www.cyrusimap.org/sasl">Cyrus SASL</a></li>
</ul>

        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../index.html">Cyrus IMAP</a>
      </nav>

      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
          <li class="breadcrumb-item"><a href="../../developers.html">Developers</a></li>
          <li class="breadcrumb-item"><a href="../developer.html">IMAP Developer Guide</a></li>
      <li class="breadcrumb-item active">Xapian for searching</li>
      <li class="wy-breadcrumbs-aside">
              <a href="https://github.com/cyrusimap/cyrus-imapd/blob/master/docsrc/imap/developer/install-xapian.rst" class="fa fa-github"> Edit on GitHub</a>
      </li>
  </ul>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
             
  <section id="xapian-for-searching">
<span id="imapinstall-xapian"></span><h1>Xapian for searching<a class="headerlink" href="#xapian-for-searching" title="Permalink to this heading"></a></h1>
<p>Cyrus can be configured to use <a class="reference external" href="http://xapian.org">Xapian</a> to power its searches.</p>
<section id="compiling-xapian-for-cyrus">
<h2>Compiling Xapian for Cyrus<a class="headerlink" href="#compiling-xapian-for-cyrus" title="Permalink to this heading"></a></h2>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If CJK support is not required in your environment, you can use Cyrus with a
standard upstream Xapian 1.4 release. Skip this section and move straight on to
<a class="reference internal" href="#configuring-xapian"><span class="std std-ref">Configuring Xapian</span></a>. If you need CJK support, you will
still need to use the cyruslibs Xapian fork and compile from source.</p>
</div>
<p>The cyrusimap/cyruslibs repository provides a pre-patched copy of 1.5-dev Xapian, ready for use with Cyrus. We are working on having the patches integrated upstream.</p>
<p>Compiling Xapian requires gcc 4.9 or later.</p>
<p>To build Xapian, fetch the cyruslibs package which comes with pre-patched Xapian and some other
dependencies. They are installed in <code class="docutils literal notranslate"><span class="pre">/usr/local/cyruslibs</span></code> by default unless overridden on the
command line.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">CYRUSLIBS</span><span class="o">=</span><span class="s2">&quot;/usr/local/cyruslibs&quot;</span>
<span class="nb">export</span><span class="w"> </span><span class="nv">PKG_CONFIG_PATH</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$CYRUSLIBS</span><span class="s2">/lib/pkgconfig:</span><span class="nv">$PKG_CONFIG_PATH</span><span class="s2">&quot;</span>
<span class="nb">export</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="s2">&quot;-Wl,-rpath,</span><span class="nv">$CYRUSLIBS</span><span class="s2">/lib -Wl,-rpath,</span><span class="nv">$CYRUSLIBS</span><span class="s2">/lib/x86_64-linux-gnu&quot;</span>
<span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$PATH</span><span class="s2">:</span><span class="nv">$CYRUSLIBS</span><span class="s2">/bin&quot;</span>

git<span class="w"> </span>clone<span class="w"> </span>git@github.com:cyrusimap/cyruslibs.git
<span class="nb">cd</span><span class="w"> </span>cyruslibs
sh<span class="w"> </span>build.sh<span class="w"> </span><span class="nv">$CYRUSLIBS_DIR</span>
</pre></div>
</div>
<p>Then follow on with the Cyrus <a class="reference internal" href="compiling.html#compiling"><span class="std std-ref">compilation instructions</span></a>, adding <code class="docutils literal notranslate"><span class="pre">--enable-xapian</span></code> to the flags to <code class="docutils literal notranslate"><span class="pre">./configure</span></code>.</p>
</section>
<section id="additional-dependencies-required-for-cyrus-with-xapian-support">
<h2>Additional dependencies required for Cyrus with Xapian support<a class="headerlink" href="#additional-dependencies-required-for-cyrus-with-xapian-support" title="Permalink to this heading"></a></h2>
<p>When building Cyrus with Xapian support enabled, the following additional
packages are required:</p>
<ul class="simple">
<li><p><a class="reference external" href="https://rsync.samba.org">rsync</a> (used when compacting databases)</p></li>
</ul>
</section>
<section id="configuring-xapian">
<span id="id1"></span><h2>Configuring Xapian<a class="headerlink" href="#configuring-xapian" title="Permalink to this heading"></a></h2>
<p>Xapian requires a running <a class="reference internal" href="../reference/manpages/systemcommands/squatter.html#std-cyrusman-squatter-8">squatter(8)</a> instance:</p>
<ul>
<li><p>In <a class="reference internal" href="../reference/manpages/configs/cyrus.conf.html#std-cyrusman-cyrus.conf-5">cyrus.conf(5)</a> set up a daemon squatter to run:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">DAEMON</span> <span class="p">{</span>
  <span class="c1"># run a rolling squatter</span>
  <span class="n">squatter</span> <span class="n">cmd</span><span class="o">=</span><span class="s2">&quot;squatter -R&quot;</span>
<span class="p">}</span>
</pre></div>
</div>
</li>
<li><p>Enable sync logging: Set <code class="docutils literal notranslate"><span class="pre">sync_log:</span> <span class="pre">on</span></code> in <a class="reference internal" href="../reference/manpages/configs/imapd.conf.html#std-cyrusman-imapd.conf-5">imapd.conf(5)</a>.</p></li>
<li><p>Add a squatter sync log channel: <code class="docutils literal notranslate"><span class="pre">sync_log_channels:</span> <span class="pre">squatter</span></code> in <a class="reference internal" href="../reference/manpages/configs/imapd.conf.html#std-cyrusman-imapd.conf-5">imapd.conf(5)</a>.</p></li>
</ul>
<p>You also need (at least one) search tier. Add this to <a class="reference internal" href="../reference/manpages/configs/imapd.conf.html#std-cyrusman-imapd.conf-5">imapd.conf(5)</a>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">search_engine</span><span class="p">:</span> <span class="n">xapian</span>
<span class="n">search_index_headers</span><span class="p">:</span> <span class="n">no</span>
<span class="n">search_batchsize</span><span class="p">:</span> <span class="mi">8192</span>
<span class="n">defaultpartition</span><span class="p">:</span> <span class="n">base</span>
<span class="n">defaultsearchtier</span><span class="p">:</span> <span class="n">t1</span>
<span class="n">partition</span><span class="o">-</span><span class="n">base</span><span class="p">:</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">cyrus</span><span class="o">/</span><span class="n">spool</span>
<span class="n">t1searchpartition</span><span class="o">-</span><span class="n">base</span><span class="p">:</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">cyrus</span><span class="o">/</span><span class="n">search</span>
</pre></div>
</div>
<p>If you want to do more complex search tiers and repacking, you'll want to read:</p>
<p><a class="reference external" href="http://lists.tartarus.org/pipermail/xapian-discuss/2014-October/009112.html">http://lists.tartarus.org/pipermail/xapian-discuss/2014-October/009112.html</a></p>
</section>
</section>


           </div>
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="jmap.html" class="btn btn-neutral float-left" title="JMAP support" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="namespaces.html" class="btn btn-neutral float-right" title="Namespaces: a developer view" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 1993–2025, The Cyrus Team.</p>
  </div>

  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
    provided by <a href="https://readthedocs.org">Read the Docs</a>.
   

</footer>
        </div>
      </div>
    </section>
  </div>
  <script>
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>
 



</body>
</html>