感觉网络上关于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,简略的目录结构如下。
12345
|
– Project – Project – settings.py – blog – models.py |
此models.py
的内容假设如下:
123456789101112
|
from django.db import modelsfrom 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,例子:
123456789101112
|
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
,故配置如下:
1234567
|
import osHAYSTACK_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
文件,文件名不能修改。内容如下:
12345678910111213141516
|
import datetimefrom haystack import indexesfrom myapp.models import Note class NoteIndex(yon-e\”>models import Note class NoteIndex(ify\”>
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,简略的目录结构如下。
12345
|
– Project – Project – settings.py – blog – models.py |
此models.py 的内容假设如下:
123456789101112
|
from django.db import modelsfrom 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,例子:
123456789101112
|
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 ,故配置如下:
1234567
|
import osHAYSTACK_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 文件,文件名不能修改。内容如下:
12345678910111213141516
|
import datetimefrom haystack import indexesfrom myapp.models import Note class NoteIndex |
|