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)