The DBAddr command defines the connection string for the database mnoGoSearch will use for indexing and searching, using URL-style notation.
DBAddr must be used before any other commands, and has global effect on the entire configuration file. Multiple DBAddr entries are possible in the case of a distributed search engine (see Chapter 11).
Type, hostname, dbname, user, password and port are the most important parts of a DBAddr value.
The main part of a DBAddr command can also be optionally followed by a number of additional parameters, like DBMode.
The main part is separated from the parameters using the QUESTION MARK character (?), and the parameters are separated from each other using the AMPERSAND SIGN character (&).
Currently supported type values are mysql, pgsql, mssql, sybase, oracle, ibase, db2, mimer, sqlite, sqlite3, cache.
An empty host name with PostgreSQL, for example,
pgsql://user:password@/dbname/
means that mnoGoSearch will communicate with the
PostgreSQL server
using a UNIX socket
rather than a TCP port.
Hostname is not important when describing
an ODBC database
(on Windows,
or on UNIX when mnoGoSearch is
compiled with UnixODBC
or iODBC support).
Specifying an
ODBC Data Source Name (DSN)
in the dbname part is enough,
so the hostname part can be
either omitted or can be set to localhost:
mysql://root@/myodbc/
mysql://root@localhost/myodbc/
Some special characters, if they appear in the user name or password, need to be escaped using %XX notation, where XX is a hexadecimal character code. Use %3A for ":", %3B for ";", %3C for "<", %3D for "=", %3E for ">", %3F for "?" and %40 for "@" characters. For example,
DBAddr pgsql://user:pwd%3Awith%40special%3Cchars@/search/
corresponds to the local PostgreSQL
database search with the user name
user and password "pwd:with@special<chars".
The DBMode optional parameter can
be set to one of the three values: single,
multi or blob.
The default value is blob.
See the Section called Word modes with an SQL database in Chapter 7 for details.
MySQL and PostgreSQL users can specify a path to the UNIX socket when connecting to a server running on the local machine:
DBAddr mysql://foo:bar@localhost/mnogosearch/?socket=/tmp/mysql.sock
DBAddr pgsql://foo:bar@/mnogosearch/?socket=/tmp/s.PGSQL.5432
SetNames parameterMySQL and
PostgreSQL users can set
connection character set by specifying the
SetNames parameter. It is
important if the default MySQL
or PostgreSQL client character set
settings does not correspond to the LocalCharset
setting of mnoGoSearch.
LocalCharset utf8
DBAddr http://root@localhost/test/?setnames=utf8
If a non-empty SetNames value is specified,
MySQL and PostgreSQL
drivers will send a SET NAMES
query after connection is established.
QCache parameter
When QCache is set to yes,
search.cgi enables search results cache,
which is used to improve search performance of the subsequent queries
for the same words, including navigating through the
search result pages (e.g. watching documents 11-20,
21-30 and so on. Also, search results cache
enables the search in found feature.
ps parameter
MySQL and
PostgreSQL users can specify
ps=yes to tell
indexer to use the prepared statement
API at crawling and indexing time.
Using prepared statements for a series of similar SQL queries is usually somewhat faster than direct execution of the same set of non-prepared SQL statements, however prepared statements for MySQL and PostgreSQL appeared in mnoGoSearch version 3.3.8 and is not enabled by default yet for stability purposes.
Starting from the version 3.3.0
it is possible to specify the wf=XXXX parameter
for DBAddr in search.htm.
Starting from the version 3.3.3,
nwf=XXXX is also allowed.
These parameters are useful if you merge two or more databases and want to give more score to the search results coming from a certain database.
The DBAddr parameters have higher precedence
over the search query parameters. For example, if wf is
specified as a DBAddr parameter, then the global
wf values
(specified in QUERY_STRING or using wf
in search.htm) are not used.
The format of the wf and nwf DBAddr
parameters is similar to the format described in the Section called Changing weights of the different document parts at search time in Chapter 10.
DBAddr mysql://root@localhost/db1/?wf=FFFF
DBAddr mysql://root@localhost/db2/?wf=1111
DBAddr mysql://root@localhost/db3/?wf=1111
Starting from the version 3.3.0,
the MaxResults=num parameter is available to specify
the maximum number of search results returned from the database.
It can be useful if you want to add a limited number of sponsored links in
the top of the search results:
DBAddr mysql://root@localhost/avd/?wf=FFFF=1&MaxResults=1
DBAddr mysql://root@localhost/db1/?wf=1111
DBAddr mysql://root@localhost/db2/?wf=1111
MaxResults affects the value of the
$(total) template variable. The number
of results beyond MaxResults
is not included into $(total).
Starting from the version 3.3.3,
the DebugSQL=yes/no parameter is understood.
When DebugSQL is set to yes,
indexer and search.cgi
print all SQL queries sent to the database.
mnoGoSearch must be compiled with --with-debug,
otherwise DebugSQL=yes is ignored.
DBAddr mysql://root@localhost/test/?DebugSQL=yes
Use the trackquery=yes parameter to activate
search query tracking.
Please refer to the Section called Tracking search queries
in Chapter 10 for details..
DBMode=blobStarting from the version 3.2.36,
DBAddr supports the Deflate=yes|no parameter.
With Deflate=yes specified, indexer compresses
data when creating fast search index with indexer -Eblob,
which gives a smaller database size and faster search. This option is
effective for DBMode=blob only. There is no need
to specify this option in search template, search.cgi detects and
handles compressed data automatically.
DBAddr mysql://foo:bar@localhost/mnogosearch/?DBMode=blob&Deflate=yes
Starting from the version 3.2.36,
DBAddr supports zint4=yes|no parameter.
With zint4=yes specified, indexer compresses document
IDs using a special compression method which we
called zint4.
This method is very effective for a sorted array of document IDs
and compresses data up to 85%
with relative good decompression speed. In conjunction with
the Deflate=yes parameter, compression ratio
can be up to 99.8%. This option is used
with DBMode=blob, for the #rec_id
array only.
DBAddr mysql://foo:bar@localhost/mnogosearch/?DBMode=blob&Deflate=yes&zint4=yes
When initializing a connection to MySQL,
mnoGoSearch forces loading of the my.cnf
configuration file from the client
option group by default. Use MyCnfGroup=group
to load options from another group, or MyCnfGroup=no
to prevent loading of my.cnf:
# Load options from a non-default option group
DBAddr mysql://foo:bar@localhost/mnogosearch/?MyCnfGroup=mnogosearch
# Prevent loading my.cnf
DBAddr mysql://foo:bar@localhost/mnogosearch/?MyCnfGroup=no
When connecting to MySQL,
mnoGoSearch uses MySQL
C API call
to tell the MySQL connection
handler which option group to load
(unless MyCnfGroup=no is specified):
mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, MyCnfGroup);
MySQL users can specify
whether to switch MySQL query
logging on/off using the SQLLog parameter:
DBAddr mysql://foo:bar@localhost/mnogosearch/?sqllog=0
DBAddr mysql://foo:bar@localhost/mnogosearch/?sqllog=1
If SQLLog parameter is given,
then mnoGoSearch sends the SET SQL_LOG_OFF=X
query after connection is established.
Only users with MySQL
SUPER privilege can use this parameter.
MySQL users can specify
whether to do binary logging
by setting the SQLLogBin parameter:
DBAddr mysql://foo:bar@localhost/mnogosearch/?sqllogbin=0
DBAddr mysql://foo:bar@localhost/mnogosearch/?sqllogbin=1
If SQLLogBin parameter is given,
then mnoGoSearch sends the SET SQL_LOG_BIN=X
after connection is established.
Only users with MySQL
SUPER privilege can use this parameter.
# Enable client-server compression
DBAddr mysql://foo:bar@localhost/mnogosearch/?Compress=yes
# Disable client-server compression
DBAddr mysql://foo:bar@localhost/mnogosearch/?Compress=no
If Compression=yes is specified then
mnoGoSearch uses MySQL
C API
call to activate client-server compression:
mysql_options(mysql, MYSQL_OPT_COMPRESS, 0);
If Compression=no is specified, or
Compression is omitted,
then this call is not done and therefore no compression happens.
Compression improves crawling, indexing and search performance when connecting to a remote MySQL server. It is not recommended to use compression with localhost.
# Enable multiple INSERT
DBAddr mysql://foo:bar@localhost/mnogosearch/?MultiInsert=yes
# Disable multiple INSERT
DBAddr mysql://foo:bar@localhost/mnogosearch/?MultiInsert=no
If MultiInsert=yes is specified then
indexer -Eblob
uses multiple INSERT syntax when
runnign with a MySQL database, for example:
INSERT INTO t1 VALUES (100,1,'...'),(101,1,'...'),(102,1,'...'),...,(200,1,'...')
If MultiInsert=no is specified, or
MultiInsert is omitted,
then this call is not done and therefore no compression happens.
MultiInsert=yes mode improves performance.