]> Sergey Matveev's repositories - public-inbox.git/blob - Documentation/public-inbox-index.pod
doc: add some recommendations around slow HDDs
[public-inbox.git] / Documentation / public-inbox-index.pod
1 =head1 NAME
2
3 public-inbox-index - create and update search indices
4
5 =head1 SYNOPSIS
6
7 public-inbox-index [OPTIONS] INBOX_DIR...
8
9 =head1 DESCRIPTION
10
11 public-inbox-index creates and updates the search, overview and
12 NNTP article number database used by the read-only public-inbox
13 HTTP and NNTP interfaces.  Currently, this requires
14 L<DBD::SQLite> and L<DBI> Perl modules.  L<Search::Xapian>
15 is optional, only to support the PSGI search interface.
16
17 Once the initial indices are created by public-inbox-index,
18 L<public-inbox-mda(1)> and L<public-inbox-watch(1)> will
19 automatically maintain them.
20
21 Running this manually to update indices is only required if
22 relying on L<git-fetch(1)> to mirror an existing public-inbox;
23 or if upgrading to a new version of public-inbox using
24 the C<--reindex> option.
25
26 Having the overview and article number database is essential to
27 running the NNTP interface, and strongly recommended for the
28 HTTP interface as it provides thread grouping in addition to
29 normal search functionality.
30
31 =head1 OPTIONS
32
33 =over
34
35 =item --jobs=JOBS, -j
36
37 Control the number of Xapian indexing jobs in a
38 (L<public-inbox-v2-format(5)>) inbox.
39
40 C<--jobs=0> is accepted as of public-inbox 1.6.0 (PENDING)
41 to disable parallel indexing.
42
43 Default: the number of existing Xapian shards
44
45 =item --compact / -c
46
47 Compacts the Xapian DBs after indexing.  This is recommended
48 when using C<--reindex> to avoid running out of disk space
49 while indexing multiple inboxes.
50
51 While option takes a negligible amount of time compared to
52 C<--reindex>, it requires temporarily duplicating the entire
53 contents of the Xapian DB.
54
55 This switch may be specified twice, in which case compaction
56 happens both before and after indexing to minimize the temporal
57 footprint of the (re)indexing operation.
58
59 Available since public-inbox 1.4.0.
60
61 =item --reindex
62
63 Forces a re-index of all messages in the inbox.
64 This can be used for in-place upgrades and bugfixes while
65 NNTP/HTTP server processes are utilizing the index.  Keep in
66 mind this roughly doubles the size of the already-large
67 Xapian database.  Using this with C<--compact> or running
68 L<public-inbox-compact(1)> afterwards is recommended to
69 release free space.
70
71 public-inbox protects writes to various indices with L<flock(2)>,
72 so it is safe to reindex while L<public-inbox-watch(1)>,
73 L<public-inbox-mda(1)> or L<public-inbox-learn(1)> run.
74
75 This does not touch the NNTP article number database or
76 affect threading.
77
78 =item --prune
79
80 Run L<git-gc(1)> to prune and expire reflogs if discontiguous history
81 is detected.  This is intended to be used in mirrors after running
82 L<public-inbox-edit(1)> or L<public-inbox-purge(1)> to ensure data
83 is expunged from mirrors.
84
85 Available since public-inbox 1.2.0.
86
87 =item --max-size SIZE
88
89 Sets or overrides L</publicinbox.indexMaxSize> on a
90 per-invocation basis.  See L</publicinbox.indexMaxSize>
91 below.
92
93 Available since public-inbox 1.5.0.
94
95 =item --batch-size SIZE
96
97 Sets or overrides L</publicinbox.indexBatchSize> on a
98 per-invocation basis.  See L</publicinbox.indexBatchSize>
99 below.
100
101 Available in public-inbox 1.6.0 (PENDING).
102
103 =back
104
105 =head1 FILES
106
107 For v1 (ssoma) repositories described in L<public-inbox-v1-format>.
108 All public-inbox-specific files are contained within the
109 C<$GIT_DIR/public-inbox/> directory.
110
111 v2 inboxes are described in L<public-inbox-v2-format>.
112
113 =head1 CONFIGURATION
114
115 =over 8
116
117 =item publicinbox.indexMaxSize
118
119 Prevents indexing of messages larger than the specified size
120 value.  A single suffix modifier of C<k>, C<m> or C<g> is
121 supported, thus the value of C<1m> to prevents indexing of
122 messages larger than one megabyte.
123
124 This is useful for avoiding memory exhaustion in mirrors.
125 This option is only available in public-inbox 1.5 or later.
126
127 Default: none
128
129 =item publicinbox.indexBatchSize
130
131 Flushes changes to the filesystem and releases locks after
132 indexing the given number of bytes.  The default value of C<1m>
133 (one megabyte) is low to minimize memory use and reduce
134 contention with parallel invocations of L<public-inbox-mda(1)>,
135 L<public-inbox-learn(1)>, and L<public-inbox-watch(1)>.
136
137 Increase this value on powerful systems to improve throughput at
138 the expense of memory use.  The reduction of lock granularity
139 may not be noticeable on fast systems.
140
141 This option is available in public-inbox 1.6 or later.
142 public-inbox 1.5 and earlier used the current default, C<1m>.
143
144 For L<public-inbox-v2-format(5)> inboxes, this value is
145 multiplied by the number of Xapian shards.  Thus a typical v2
146 inbox with 3 shards will flush every 3 megabytes by default.
147
148 Default: 1m (one megabyte)
149
150 =back
151
152 =head1 ENVIRONMENT
153
154 =over 8
155
156 =item PI_CONFIG
157
158 Used to override the default "~/.public-inbox/config" value.
159
160 =item XAPIAN_FLUSH_THRESHOLD
161
162 The number of documents to update before committing changes to
163 disk.  This environment is handled directly by Xapian, refer to
164 Xapian API documentation for more details.
165
166 For public-inbox 1.6 and later, use C<publicinbox.indexBatchSize>
167 instead.  Setting C<XAPIAN_FLUSH_THRESHOLD> for a large C<--reindex>
168 may cause L<public-inbox-mda(1)>, L<public-inbox-learn(1)> and
169 L<public-inbox-watch(1)> tasks to wait long periods of time
170 during C<--reindex>.
171
172 Default: none, uses C<publicinbox.indexBatchSize>
173
174 =back
175
176 =head1 UPGRADING
177
178 Occasionally, public-inbox will update it's schema version and
179 require a full index by running this command.
180
181 =head1 CONTACT
182
183 Feedback welcome via plain-text mail to L<mailto:meta@public-inbox.org>
184
185 The mail archives are hosted at L<https://public-inbox.org/meta/>
186 and L<http://hjrcffqmbrq6wope.onion/meta/>
187
188 =head1 COPYRIGHT
189
190 Copyright 2016-2020 all contributors L<mailto:meta@public-inbox.org>
191
192 License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt>
193
194 =head1 SEE ALSO
195
196 L<Search::Xapian>, L<DBD::SQLite>