1)要在虚拟环境中依次安装需要的第三方包
pip install django-haystack
pip install whoosh
pip install jieda
2)在settings.py文件中,安装应用haystack,也就是加入这个应用
INSTALLED_APPS = ( 'haystack', )
3)然后再在settings.py文件中配置搜索引擎
1 # 全文检索框架的配置 2 HAYSTACK_CONNECTIONS = { 3 'default': { 4 # 使用whoosh引擎,whoosh_cn_backend是自新建修改whoosh_backend为中文jieda 5 'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine', 6 # 索引文件的路径 7 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), 8 } 9 } 10 11 # 当添加、修改、删除数据时,自动生成索引 12 HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' 13 14 HAYSTACK_SEARCH_RESULTS_PER_PAGE = 6 # 搜索到的结果变更显示为6条(或多条)
4)最后在初始urls.py中添加搜索的配置
1 urlpatterns = [ 2 url(r'^search/', include('haystack.urls')), # 全文检索 3 ]
5)在要进行索引的应用下创建索引文件search_indexes.py,例如:在df_goods应用目录下创建
1 # coding=utf-8 2 from haystack import indexes 3 from df_goods.models import Goods # 导入商品类 4 5 6 class GoodsIndex(indexes.SearchIndex, indexes.Indexable): 7 # 指定对于某个类的某些数据建立索引 8 text = indexes.CharField(document=True, use_template=True) 9 10 def get_model(self): 11 return Goods 12 13 def index_queryset(self, using=None): 14 return self.get_model().objects.all()
6)在templates目录下创建search/indexes/df_goods创建goods_text.txt文件加入
# 指定的索引的属性
{{object.gcontent}}
7)找到虚拟环境py_django(你的django虚拟环境)下的haystack目录
.virtualenvs/py_django/lib/python2.7/site-packages/haystack/backends/
8)在上面目录中创建ChineseAnalyzer.py文件
1 import jieba 2 from whoosh.analysis import Tokenizer, Token 3 4 class ChineseTokenizer(Tokenizer): 5 def __call__(self, value, positions=False, chars=False, 6 keeporiginal = False, removestops=True, start_pos=0, start_char=0, mode='', **kwargs): 7 t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs) 8 seglist = jieba.cut(value, cut_all=True) 9 for w in seglist: 10 t.original = t.text = w 11 t.boost = 1.0 12 if positions: 13 t.pos = start_pos + value.find(w) 14 if chars: 15 t.startchar = start_char + value.find(w) 16 t.endchar = start_char + value.find(w) + len(w) 17 yield t 18 19 def ChineseAnalyzer(): 20 return ChineseTokenizer()
9)复制whoosh_backend.py⽂件,改为whoosh_cn_backend.py⽂件,
在里面引入中文分析类,内部采用jieba分词
from .ChineseAnalyzer import ChineseAnalyzer # 导入中文jieba分词
之后再把
analyzer=StemmingAnalyzer()
改为
analyzer=ChineseAnalyzer()
10)初始化索引数据,生成索引
python manage.py rebuild_index
11)在df_goods中创建admin.py文件
1 from django.contrib import admin 2 from df_goods.models import Goods 3 # Register your models here. 4 5 admin.site.register(Goods)