感觉网络上关于Django全文搜索的中文文章太少,并且讲的也不是很到位,就是简单介绍了怎么配置,并没有说这样配置有什么用,所以依然很迷茫。所以希望我这篇文章能够帮助到后来人。
转载说明来源 http://tenlee2012.github.io/2016/04/21/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,简略的目录结构如下。
- Project
- Project
- settings.py
- blog
- models.py
- Project
此models.py
的内容假设如下:
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. 首先安装各工具
pip install whoosh django-haystack jieba
2. 添加 Haystack 到Django的 INSTALLED_APPS
配置Django项目的settings.py里面的 INSTALLED_APPS
添加Haystack,例子:
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',
]