使用haystack实现全文搜索功能

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值