感觉网络上关于Django全文搜索的中文文章太少,并且讲的也不是很到位,就是简单介绍了怎么配置,并没有说这样配置有什么用,所以依然很迷茫。所以希望我这篇文章能够帮助到后来人。
一、使用的工具
- haystack是django的开源搜索框架,该框架支持Solr, Elasticsearch, Whoosh, *Xapian*搜索引擎,不用更改代码,直接切换引擎,减少代码量。
- 搜索引擎使用Whoosh,这是一个由纯Python实现的全文搜索引擎,没有二进制文件等,比较小巧,配置比较简单,当然性能自然略低。
- 中文分词Jieba,由于Whoosh自带的是英文分词,对中文的分词支持不是太好,故用jieba替换whoosh的分词组件。
- 其他:Python 3.4.4, Django 1.8.3,Debian 4.2.6_3
二、配置说明
现在假设我们的项目叫做Project
,有一个myapp
的app,简略的目录结构如下。
1 2 3 4 5 |
- Project - Project - settings.py - blog - models.py |
此models.py
的内容假设如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
from django.db import models from django.contrib.auth.models import User class Note(models.Model): user = models.ForeignKey(User) pub_date = models.DateTimeField() title = models.CharField(max_length=200) body = models.TextField() def __str__(self): return self.title |
1. 首先安装各工具
1 |
pip install whoosh django-haystack jieba |
2. 添加 Haystack 到Django的 INSTALLED_APPS
配置Django项目的settings.py里面的 INSTALLED_APPS
添加Haystack,例子:
1 2 3 4 5 6 7 8 9 10 11 12 |
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', # Added. haystack先添加, 'haystack', # Then your usual apps... 自己的app要写在haystakc后面 'blog', ] |
3. 修改 你的 settings.py,以配置引擎
本教程使用的是Whoosh
,故配置如下:
1 2 3 4 5 6 7 |
import os HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'), }, } |
其中顾名思义,ENGINE
为使用的引擎必须要有,如果引擎是Whoosh
,则PATH
必须要填写,其为Whoosh 索引文件的存放文件夹。
其他引擎的配置见官方文档
4.创建索引
如果你想针对某个app例如mainapp
做全文检索,则必须在mainapp
的目录下面建立search_indexes.py
文件,文件名不能修改。内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import datetime from haystack import indexes from myapp.models import Note class NoteIndex(yon-e">models import Note class NoteIndex(ify">
二、配置说明现在假设我们的项目叫做
此
1. 首先安装各工具
2. 添加 Haystack 到Django的 INSTALLED_APPS配置Django项目的settings.py里面的
3. 修改 你的 settings.py,以配置引擎本教程使用的是
其中顾名思义, 其他引擎的配置见官方文档 4.创建索引如果你想针对某个app例如
|