django_sphinx_db는 SphinxQL를 통해 스핑크스와의 상호 작용을 할 수있는 간단한 장고 데이터베이스 백엔드입니다. 그것은 기본적으로 스핑크스에 대한 몇 가지 변경 사항으로 기본 장고 MySQL의 백엔드입니다.
SphinxQL는 스핑크스 searchd가 지원하는 MySQL의 복제 모드입니다. 그것은 당신이 정기적 된 SQL 구문을 통해 인덱스를 쿼리 할 수 있습니다. 당신이 RT (실시간) 인덱스를 사용하는 경우에는 추가하고 인덱스의 업데이트 문서 수 있습니다.
이 백엔드는 장고 settings.py에서 데이터베이스로 configued하기위한 것입니다.
이 패키지에는 관리자 클래스, SQLCompiler 제품군을 제공하고 코드를 지원하면이 가능하게 할 수 있습니다.
용법
우선, 당신은 장고 구성에서 데이터베이스 연결을 정의해야합니다. 또한 스핑크스 데이터베이스 라우터를 설치하고 INSTALLED_APPS 목록에 django_sphinx_db를 추가해야합니다.
# django_sphinx_db 설치 :
INSTALLED_APPS + = ( 'django_sphinx_db')
# 이것은 데이터베이스의 스핑크스 서버의 이름입니다 :
SPHINX_DATABASE_NAME = '스핑크스'
# 스핑크스에 대한 연결을 정의
DATABASES = {
& NBSP; '기본'{
& NBSP; # 당신의 기본 데이터베이스 연결은 간다 ...
& NBSP;}
& NBSP; SPHINX_DATABASE_NAME : {
& NBSP; '엔진': 'django_sphinx_db.backend.sphinx'
& NBSP; # 데이터베이스 이름은 중요하지 않습니다.
& NBSP; 'NAME': '',
& NBSP는 #에는 사용자 이름이나 암호가 없습니다.
& NBSP; 'USER': '',
& NBSP; 'PASSWORD': '',
& NBSP는, 로컬 호스트를 사용하지 마십시오 #이 대신 TCP의 UDS를 사용하여 발생합니다 ...
& NBSP; 'HOST': '127.0.0.1',
& NBSP; 'PORT': '9306',
& NBSP;}
}
# ... 그리고 경로를 따라 ...
DATABASE_ROUTERS = (
& NBSP; 'django_sphinx_db.routers.SphinxRouter'
)```
그런 다음 SphinxModel에서 파생 모델을 정의합니다. 평소와 같이,이 모델은 models.py에 배치됩니다.
django_sphinx_db.backend.models에서 SphinxModel, SphinxField를 가져
클래스 MyIndex (SphinxModel) :
& NBSP; 클래스 메타 :
& NBSP;이 다음 비트가 중요하다 #, 당신은 장고 관리하지 않습니다
& NBSP; #이 모델에 대한 테이블.
& NBSP는 = 거짓 관리
& NBSP; 이름 = SphinxField ()
& NBSP; 콘텐츠 = SphinxField ()
& NBSP; 날짜 = models.DateTimeField ()
& NBSP; 크기 = models.IntegerField ()
스핑크스 구성
지금 당신은 당신의 인덱스에 대한 구성 파일을 생성해야합니다. 관리 명령은 적절한 구성에 모델 정의를 변환하기 위해 제공된다.
& NBSP; 파이썬 manage.py의 syncsphinx >> /etc/sphinx.conf
& NBSP; VI /etc/sphinx.conf
생성 된 설정 파일 그러나, 당신은 [스핑크스 구성 참조]에 대한 구성을 검토 할 것을 권장하고 있습니다 좋은 시작해야한다 (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
스핑크스와 장고 ORM을 사용하여
이제 쿼리하고 장고 ORM을 사용하여 실시간 색인을 관리 할 수 있습니다. 당신은 삽입하고 다음과 같은 방법을 사용하여 인덱스의 문서를 업데이트 할 수 있습니다. 아래의 예는 일반 텍스트로 파일 내용을 읽을 [전체 텍스트 라이브러리 (https://github.com/btimby/fulltext)를 사용합니다.
os를 수입, 시간, 전체 텍스트
# 인덱스에 문서를 추가합니다.
경로 = 'resume.doc'
성 = os.stat (경로)
MyIndex.objects.create (
& NBSP; 이름 = 경로,
& NBSP; 함량 = fulltext.get (경로 ''),
& NBSP; 크기 = st.st_size,
& NBSP; 날짜 = time.strftime ( '% Y- % M- % D % H : %의 M : %의 S', time.localtime (st.st_mtime)),
)
# 인덱스에서 문서를 업데이트
문서 = MyIndex.objects.get (PK = 1)
doc.content = fulltext.get (경로, '')
doc.size = st.st_size
doc.date = time.strftime ( '% Y- % M- % D % H : %의 M : %의 S', time.localtime (st.st_mtime))
doc.save ()
당신은 장고 검색 연산자를 사용하여 전체 텍스트 쿼리를 수행 할 수 있습니다. 자세한 내용은 장고 설명서를 참조하십시오.
MyIndex.objects.filter (content__search = '는 foobar')
쿼리가 스핑크스에 직접 통과, 그래서 스핑크스 확장 쿼리 구문을 존중한다.
단위 테스트
장고의 스핑크스 백엔드 create_test_db과 destroy_test_db 호출을 무시합니다. 스핑크스 데이터베이스를 구성 할 때 이러한 호출은 실행 테스트에서 당신을 방지 실패합니다. 그러나, 이렇게 구성된 스핑크스 데이터베이스 테스트 중에 사용되는 것을 의미한다. 만큼 당신이 염두에두고 테스트를 작성할 때, 아무 문제가 없어야합니다. 당신은 테스트 실행 중에 다른 데이터베이스 연결에 쿼리를 리디렉션 할 TEST_NAME 데이터베이스 연결 매개 변수를 사용할 수 있음을 기억
이 요구 사항 : 있습니다.
파이썬
장고
댓글을 찾을 수 없습니다