зеркало из https://github.com/mozilla/kitsune.git
Add search docs and some helpful management commands.
This commit is contained in:
Родитель
1d9bb3f592
Коммит
f3a36ae908
|
@ -0,0 +1,16 @@
|
||||||
|
from optparse import make_option
|
||||||
|
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
from search.utils import reindex
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Reindex the database for Sphinx.'
|
||||||
|
option_list = BaseCommand.option_list + (
|
||||||
|
make_option('--rotate', dest='rotate', action='store_true',
|
||||||
|
default=False, help='Rotate indexes for running server.'),
|
||||||
|
)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
reindex(options['rotate'])
|
|
@ -0,0 +1,10 @@
|
||||||
|
from django.core.management.base import NoArgsCommand
|
||||||
|
|
||||||
|
from search.utils import start_sphinx
|
||||||
|
|
||||||
|
|
||||||
|
class Command(NoArgsCommand):
|
||||||
|
help = 'Start the Sphinx server.'
|
||||||
|
|
||||||
|
def handle_noargs(self, *args, **kwargs):
|
||||||
|
start_sphinx()
|
|
@ -0,0 +1,10 @@
|
||||||
|
from django.core.management.base import NoArgsCommand
|
||||||
|
|
||||||
|
from search.utils import stop_sphinx
|
||||||
|
|
||||||
|
|
||||||
|
class Command(NoArgsCommand):
|
||||||
|
help = 'Stop the Sphinx server.'
|
||||||
|
|
||||||
|
def handle_noargs(self, *args, **kwargs):
|
||||||
|
stop_sphinx()
|
|
@ -0,0 +1,118 @@
|
||||||
|
======
|
||||||
|
Search
|
||||||
|
======
|
||||||
|
|
||||||
|
Kitsune uses `Sphinx Search <http://www.sphinxsearch.com>`_ to power its
|
||||||
|
on-site search facility.
|
||||||
|
|
||||||
|
Sphinx search gives us a number of advantages over MySQL's full-text search or
|
||||||
|
Google's site search.
|
||||||
|
|
||||||
|
* Much faster than MySQL.
|
||||||
|
* And reduces load on MySQL.
|
||||||
|
* We have total control over what results look like.
|
||||||
|
* We can adjust searches with non-visible content.
|
||||||
|
* We don't rely on Google reindexing the site.
|
||||||
|
* We can fine-tune the algorithm ourselves.
|
||||||
|
|
||||||
|
|
||||||
|
Installing Sphinx Search
|
||||||
|
========================
|
||||||
|
|
||||||
|
We currently require **Sphinx 0.9.9**. You may be able to install this from a
|
||||||
|
package manager like yum, aptitude, or brew.
|
||||||
|
|
||||||
|
If not, you can easily `download <http://sphinxsearch.com/downloads/>`_ the
|
||||||
|
source and compile it. Generally all you'll need to do is::
|
||||||
|
|
||||||
|
$ cd sphinx-0.9.9
|
||||||
|
$ ./configure --enable-id64 # Important! We need 64-bit document IDs.
|
||||||
|
$ make
|
||||||
|
$ sudo make install
|
||||||
|
|
||||||
|
This should install Sphinx in ``/usr/local/bin``. (You can change this by
|
||||||
|
setting the ``--prefix`` argument to ``configure``.)
|
||||||
|
|
||||||
|
To test that everything works, make sure that the ``SPHINX_INDEXER`` and
|
||||||
|
``SPHINX_SEARCHD`` settings point to the ``indexer`` and ``searchd`` binaries,
|
||||||
|
respectively. (Probably ``/usr/local/bin/indexer`` and
|
||||||
|
``/usr/local/bin/searchd``, unless you changed the prefix.) Then run the
|
||||||
|
Kitsune search tests::
|
||||||
|
|
||||||
|
$ ./manage.py test -s --no-input --logging-clear-handlers search
|
||||||
|
|
||||||
|
If the tests pass, everything is set up correctly!
|
||||||
|
|
||||||
|
|
||||||
|
Using Sphinx Search
|
||||||
|
===================
|
||||||
|
|
||||||
|
Having Sphinx installed will allow the search tests to run, which may be
|
||||||
|
enough. But you want to work on or test the search app, you will probably need
|
||||||
|
to actually see search results!
|
||||||
|
|
||||||
|
|
||||||
|
The Easy, Sort of Wrong Way
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
The easiest way to start Sphinx for testing is to use some helpful management
|
||||||
|
commands for developers::
|
||||||
|
|
||||||
|
$ ./manage.py reindex
|
||||||
|
$ ./manage.py start_sphinx
|
||||||
|
|
||||||
|
You can also stop Sphinx::
|
||||||
|
|
||||||
|
$ ./manage.py stop_sphinx
|
||||||
|
|
||||||
|
If you need to update the search indexes, you can pass the ``--rotate`` flag to
|
||||||
|
``reindex`` to update them in-place::
|
||||||
|
|
||||||
|
$ ./manage.py reindex --rotate
|
||||||
|
|
||||||
|
While this method is very easy, you will need to reindex after any time you run
|
||||||
|
the search tests, as they will overwrite the data files Sphinx uses.
|
||||||
|
|
||||||
|
|
||||||
|
The Complicated but Safe Way
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
You can safely run multiple instances of ``searchd`` as long as they listen on
|
||||||
|
different ports, and store their data files in different locations.
|
||||||
|
|
||||||
|
The advantage of this method is that you won't need to reindex every time you
|
||||||
|
run the search tests. Otherwise, this should be identical to the easy method
|
||||||
|
above.
|
||||||
|
|
||||||
|
Start by copying ``configs/sphinx`` to a new directory, for example::
|
||||||
|
|
||||||
|
$ cp -r configs/sphinx ../
|
||||||
|
$ cd ../sphinx
|
||||||
|
|
||||||
|
Then create your own ``localsettings.py`` file::
|
||||||
|
|
||||||
|
$ cp localsettings.py-dist localsettings.py
|
||||||
|
$ vim localsettings.py
|
||||||
|
|
||||||
|
Fill in the settings so they match the values in ``settings_local.py``. Pick a
|
||||||
|
place on the file system for ``ROOT_PATH``.
|
||||||
|
|
||||||
|
Once you have tweaked all the settings so Sphinx will be able to talk to your
|
||||||
|
database and write to the directories, you can run the Sphinx binaries
|
||||||
|
directly (as long as they are on your ``$PATH``)::
|
||||||
|
|
||||||
|
$ indexer --all -c sphinx.conf
|
||||||
|
$ searchd -c sphinx.conf
|
||||||
|
|
||||||
|
You can reindex without restarting ``searchd`` by using the ``--rotate`` flag
|
||||||
|
for ``indexer``::
|
||||||
|
|
||||||
|
$ indexer --all --rotate -c sphinx.conf
|
||||||
|
|
||||||
|
You can also stop ``searchd``::
|
||||||
|
|
||||||
|
$ searchd --stop -c sphinx.conf
|
||||||
|
|
||||||
|
This method not only lets you maintain a running Sphinx instance that doesn't
|
||||||
|
get wiped out by the tests, but also lets you see some very interesting output
|
||||||
|
from Sphinx about indexing rate and statistics.
|
Загрузка…
Ссылка в новой задаче