首页 > 编程 > Python > 正文

Python中使用haystack实现django全文检索搜索引擎功能

2020-02-16 02:10:04
字体:
来源:转载
供稿:网友

前言

django是python语言的一个web框架,功能强大。配合一些插件可为web网站很方便地添加搜索功能。

搜索引擎使用whoosh,是一个纯python实现的全文搜索引擎,小巧简单。

中文搜索需要进行中文分词,使用jieba。

直接在django项目中使用whoosh需要关注一些基础细节问题,而通过haystack这一搜索框架,可以方便地在django中直接添加搜索功能,无需关注索引建立、搜索解析等细节问题。

haystack支持多种搜索引擎,不仅仅是whoosh,使用solr、elastic search等搜索,也可通过haystack,而且直接切换引擎即可,甚至无需修改搜索代码。

配置搜索

1.安装相关包

pip install django-haystackpip install whooshpip install jieba

2.配置django的settings

修改settings.py文件,添加haystack应用:

INSTALLED_APPS = (  ...  'haystack', #将haystack放在最后)

在settings中追加haystack的相关配置:

HAYSTACK_CONNECTIONS = {  'default': {    'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',    'PATH': os.path.join(BASE_DIR, 'whoosh_index'),  }}# 添加此项,当数据库改变时,会自动更新索引,非常方便HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

3.添加url

在整个项目的urls.py中,配置搜索功能的url路径:

urlpatterns = [  ...  url(r'^search/', include('haystack.urls')),]

4.在应用目录下,添加一个索引

在子应用的目录下,创建一个名为 search_indexes.py 的文件。

from haystack import indexes# 修改此处,为你自己的modelfrom 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()

说明:

1)修改上文中三处注释即可

2)此文件指定如何通过已有数据来建立索引。get_model处,直接将django中的model放过来,便可以直接完成索引啦,无需关注数据库读取、索引建立等细节。

3)text=indexes.CharField一句,指定了将模型类中的哪些字段建立索引,而use_template=True说明后续我们还要指定一个模板文件,告知具体是哪些字段

5.指定索引模板文件

在项目的“templates/search/indexes/应用名称/”下创建“模型类名称_text.txt”文件。

例如,上面的模型类名称为GoodsInfo,则创建goodsinfo_text.txt(全小写即可),此文件指定将模型中的哪些字段建立索引,写入如下内容:(只修改中文,不要改掉object)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表