User:Dan Nessett/Technical/Notes on setting up Sphinx Search Engine

From Citizendium
< User:Dan Nessett‎ | Technical
Revision as of 17:31, 25 February 2010 by imported>Dan Nessett (→‎Installing Sphinx Search Extension)
Jump to navigation Jump to search

Installing Sphinx Search Engine Daemon

Installing on Ubuntu

http://www.postneo.com/2009/02/06/sphinx-search-with-postgresql

From this URL (modified to work properly):

Install build toolchain:

sudo aptitude install build-essential checkinstall

Install Postgres:

sudo aptitude install postgresql postgresql-client \
postgresql-client-common postgresql-contrib \
postgresql-server-dev-8.3

Note to self: The first two shouldn't be necessary, since postgresql should already be installed. However, the last one probably is required:

sudo aptitude install postgresql-server-dev-8.3

Get Sphinx source:

cd /usr/local/src
sudo mkdir sphinx
cd sphinx
sudo wget http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
sudo tar xzvf sphinx-0.9.9.tar.gz
cd sphinx-0.9.9

Configure and make:

sudo ./configure --without-mysql --with-pgsql \
--with-pgsql-includes=/usr/include/postgresql/ \
--with-pgsql-lib=/usr/lib/postgresql/8.3/lib/
sudo make

Run checkinstall:

sudo mkdir /usr/local/var
sudo checkinstall

Sphinx is now installed in /usr/local. Check out /usr/local/etc/ for configuration info.

Create something to index:

createdb -U postgres test
psql -U postgres test
test=# create table test (id integer primary key not null, text text);
test=# insert into test (text) values ('Hello, World!');
test=# insert into test (text) values ('This is a test.');
test=# insert into test (text) values ('I have another thing to test.');
test=# -- A user with a password is required.
test=# create user foo with password 'bar';
test=# alter table test owner to foo;
test=# \q

Configure sphinx (replace nano with your editor of choice):

cd /usr/local/etc
sudo cp sphinx-min.conf.dist sphinx.conf
sudo nano sphinx.conf

These values worked for me. I left configuration for indexer and searchd unchanged:

source src1
{
  type = pgsql
  sql_host = localhost
  sql_user = foo
  sql_pass = bar
  sql_db = test
  sql_port = 5432
  sql_query = select id, text from test
  sql_query_info = SELECT * from test WHERE id=$id
}

index test1
{
  source = src1
  path = /var/data/test1
  docinfo = extern
  charset_type = utf-8
}

Reindex:

sudo mkdir /var/data
sudo indexer --all

Run searchd:

sudo searchd

Play:

search world

Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/usr/local/etc/sphinx.conf'...
index 'test1': query 'world ': returned 1 matches of 1 total in 0.000 sec

displaying matches:
1. document=1, weight=1

words:
1. 'world': 1 documents, 1 hits

Use Python:
cd sphinx-0.9.8.1/api
python
>>> import sphinxapi, pprint
>>> c = sphinxapi.SphinxClient()
>>> q = c.Query('world')
>>> pprint.pprint(q)
{'attrs': [],
 'error': '',
 'fields': ['text'],
 'matches': [{'attrs': {}, 'id': 1, 'weight': 1}],
 'status': 0,
 'time': '0.000',
 'total': 1,
 'total_found': 1,
 'warning': '',
 'words': [{'docs': 1, 'hits': 1, 'word': 'world'}]}

If you add new data and want to reindex, make sure you use the –rotate flag:
sudo indexer --rotate --all

This is an extremely quick and dirty installation designed to give me a sandbox to play with. For production use you would want to run as a non-privileged user and would probably want to have an /etc/init.d script for searchd or run it behind supervised. If you’re looking to experiment with Sphinx and MySQL, there should be plenty of documentation out there to get you started.

Installing on CentOS 5.4

Installing Sphinx Search Extension

http://www.mediawiki.org/wiki/Extension:SphinxSearch#Step_1_-_Install_Sphinx

Configuring Sphinx Search Extension