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=utf8If 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=blob
Starting 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=noWhen 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=1If
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=1If
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.