1.安装
Pip install django-haystack
安装haystack第三方搜索模块(app)类似于验证码模块captcha
Pip install whoosh
安装第三方搜索引擎
Pip install jieba
安装分词模块jieba
2.配置settings.py
将hanystack应用名写在所有应用之前
在settings.py中配置haystack中搜索使用的搜索引擎 这里用的是whoosh
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
}
}
并配置:
# 当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 设置搜索结果页,每页显示的数目,默认为20,可以自己修改
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 2
3.创建目录保存索引文件
在项目根目录创建一个名为whoosh_index的文件夹
4. 在urls.py中添加搜索路由
url(r'^search/', include('haystack.urls')),
5.指定索引模板文件
在项目的“templates/search/indexes/应用名称/”下创建“模型类名称_text.txt”文件。
上面的模型类名称为GoodsInfo,则创建goodsinfo_text.txt(全小写即可),此文件指定将模型中的哪些字段建立索引,写入如下内容:(只修改中文,不要改掉object)
{{ object.字段1 }}
{{ object.字段2 }}
{{ object.字段3 }}
6.
在应用目录下,添加一个索引
在子应用的目录下,创建一个名为 search_indexes.py 的文件。写入:
from haystack import indexes# 修改此处,为你自己的model
from df_goods.models import GoodsInfo
# 修改此处,类名为模型类的名称+Index,比如模型类为GoodsInfo,则这里类名为GoodsInfoIndexclass GoodsInfoIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
# 修改此处,为你自己的model
return GoodsInfo
def index_queryset(self, using=None):
return self.get_model().objects.all()
7.使用jieba中文分词器替换默认分词器
在haystack的安装文件夹下,路径如“/home/python/.virtualenvs/django_py2/lib/python2.7/site-packages/haystack/backends”,建立一个名为ChineseAnalyzer.py的文件,写入如下内容:
import jieba
from whoosh.analysis import Tokenizer, Token
class ChineseTokenizer(Tokenizer):
def __call__(self, value, positions=False, chars=False,
keeporiginal=False, removestops=True,
start_pos=0, start_char=0, mode='', **kwargs):
t = Token(positions, chars, removestops=removestops, mode=mode,
**kwargs)
seglist = jieba.cut(value, cut_all=True)
for w in seglist:
t.original = t.text = w
t.boost = 1.0
if positions:
t.pos = start_pos + value.find(w)
if chars:
t.startchar = start_char + value.find(w)
t.endchar = start_char + value.find(w) + len(w)
yield t
def ChineseAnalyzer():
return ChineseTokenizer()
8.更改文件配置
然后放进来
然后打开whoosh_cn_backend.py 也就是settings.py中设置的
导入ChineseAnalyzer
From .ChineseAnalyzer import ChineseAnalyzer
并且配置搜索analyzer= 将解析器设置为ChineseAnalyzer()
9. cmd进入项目根目录生成索引
Python manage.py rebulid_index