django_sphinx_db é um simples banco de dados backend Django que permite a interação com Sphinx via SphinxQL. É basicamente o padrão backend Django MySQL com algumas mudanças para Sphinx.
SphinxQL é um modo de clone MySQL que Sphinx searchd suporta. Ele permite que você consultar índices via sintaxe SQL idade regular. Se você estiver usando rt índices (em tempo real), você também pode adicionar e atualizar documentos no índice.
Este método é feito para ser configued como um banco de dados no settings.py Django.
Este pacote fornece uma classe Manager, SQLCompiler suíte e apoiar código para tornar isso possível.
Uso
Primeiro de tudo, você deve definir uma conexão de banco de dados na configuração do Django. Você também deve instalar o roteador de banco de dados Sphinx e adicionar à sua lista de django_sphinx_db INSTALLED_APPS.
# Instalar django_sphinx_db:
INSTALLED_APPS + = ('django_sphinx_db',)
# Este é o nome do servidor de esfinge em bases de dados:
SPHINX_DATABASE_NAME = "esfinge"
# Define a conexão com Sphinx
BANCOS DE DADOS = {
& Nbsp; 'default': {
& Nbsp; # Sua conexão banco de dados padrão vai aqui ...
& Nbsp;},
& Nbsp; SPHINX_DATABASE_NAME: {
& Nbsp; 'motor': 'django_sphinx_db.backend.sphinx',
& Nbsp; # O nome do banco não importa.
& Nbsp; "NAME ':' ',
& Nbsp; # Não há nenhum nome de usuário ou senha.
& Nbsp; 'usuário': '',
& Nbsp; 'PASSWORD': '',
& Nbsp; # Não use localhost, isso resultará no uso de uma UDS em vez de TCP ...
& Nbsp; 'HOST': '127.0.0.1',
& Nbsp; "PORT ':' 9306 ',
& Nbsp;},
}
# ... E rota em conformidade ...
DATABASE_ROUTERS = (
& Nbsp; "django_sphinx_db.routers.SphinxRouter ',
) `` `
Em seguida, definir um modelo que deriva da SphinxModel. Como de costume, o modelo será colocado em models.py.
de django_sphinx_db.backend.models importar SphinxModel, SphinxField
MyIndex classe (SphinxModel):
& Nbsp; class Meta:
& Nbsp; # Este próximo bit é importante, você não quer Django para gerenciar
& Nbsp; # mesa para este modelo.
& Nbsp; gestão = False
& Nbsp; name = SphinxField ()
& Nbsp; content = SphinxField ()
& Nbsp; date = models.DateTimeField ()
& Nbsp; size = models.IntegerField ()
Configurando Sphinx
Agora você precisa para gerar um arquivo de configuração para o seu índice. Um comando de gerenciamento é fornecido para converter a definição do modelo para uma configuração adequada.
& Nbsp; python manage.py syncsphinx >> /etc/sphinx.conf
& Nbsp; vi /etc/sphinx.conf
O arquivo de configuração gerado deve ser um bom começo no entanto, que são convidados a avaliar a configuração contra o [referência configuração Sphinx] (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
Usando o Django ORM com Sphinx
Agora você pode consultar e gerir o seu índice em tempo real usando o Django ORM. Você pode inserir e atualizar documentos no índice usando os seguintes métodos. O exemplo a seguir usa o [biblioteca texto completo] (https://github.com/btimby/fulltext) para a leitura de conteúdo do arquivo como texto simples.
import os, tempo, texto completo
# Adicionar um documento para o índice.
path = 'resume.doc'
st = os.stat (path)
MyIndex.objects.create (
& Nbsp; name = caminho,
& Nbsp; content = fulltext.get (caminho, ''),
& Nbsp; size = st.st_size,
& Nbsp; date = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime)),
)
# Atualizar um documento no índice
doc = MyIndex.objects.get (pk = 1)
doc.content = fulltext.get (caminho, '')
doc.size = st.st_size
doc.date = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime))
doc.save ()
Você pode realizar consultas de texto completo usando o operador de pesquisa Django. Leia a documentação do Django para mais informações.
MyIndex.objects.filter (content__search = 'Foobar')
A consulta é passada através diretamente a Esfinge, de modo que a sintaxe de consulta estendida Sphinx é respeitada.
Testes Unitários
O backend Sphinx para Django irá ignorar chamadas create_test_db e destroy_test_db. Essas chamadas irá falhar quando o banco de dados Sphinx está configurado, impedindo-o de testes de corrida. No entanto, isto significa que qualquer base de dados Sphinx configurado será utilizada durante o ensaio. Contanto que você escrever seus testes com isso em mente, não deve haver nenhum problema. . Lembre-se que você pode usar o parâmetro test_name conexão com o banco para redirecionar consultas para uma conexão de banco de dados diferente durante testes
Requisitos :
- Python
- Django
Comentários não encontrado