搜索插件(django-haystack)

搜索

  搜索可以使用最原始的 like 的方式进行搜索。当然这种搜索方式对于一些少量的数据是非常合适的。但是随着数量越来越大。这时候我们就需要使用搜索引擎了。搜索引擎会将所有需要的数据使用算法做一个索引,以后的时候就需要根据这个索引即可找到相应的数据。索引引擎做索引的过程会比较慢,但是一旦索引建立完成,那么以后在搜索的时候就会很快了。

django-haystack 插件

  这个插件是专门给 django 提供搜索功能的。 django-haystack 提供了一个搜索的接口,底层可以根据自己需求更换搜索引擎。它其实有点类似于 django 中的 ORM 插件,提供l了一个操作数据库接口,但是底层具体使用哪个数据库是可以自己设置的。安装方式非常简单,通过 pip install django-paystakc 即可安装。

搜索引擎

  django-haystack 支持的搜索引擎有Solr、Elasticsearch、Whoosh、Xapian等。 Whoosh 是基于纯 Python 的搜索引擎,检索速度快,集成方便。这里我们就选择 Whoosh 来作为 haystack 的搜索引擎。安装方式同样也是通过 pip 安装的:pip install whoosh

集成步骤

1 在项目中安装 django-haystack

2 设置搜索引擎

在 setting 中添加以下配置

# 搜索配置
HAYSTACK_CONNECTIONS = {
    'default': {
        # 设置haystack的搜索对象
        'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
        # 设置索引文件的位置
        'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
    }
}

3 创建索引类

在模型所属的 app 下创建一个 search_index.py 文件,然后创建索引类。比如要给 News 创建索引,代码如下:

from haystack import indexes
from .models import News
class NewsIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    # 给哪个模型服务
    def get_model(self):
        return News
    # 返回模型的值
    def index_queryset(self, using=None):
        return self.get_model().objects.all()

4 添加url 映射

在住 url.py 中,添加以下代码:

5 添加模板

在 template 文件夹下创建以下结构的目录:

template -- search -- indexes -- news(app的名字) -- news(app的名字)_text.txt

news_text.txt 文件中添加需要被索引的字段,示例代码如下:

{{ object.title }}
{{ object.content }}

  接着在 template 文件夹下创建 search.html 模板文件, haystack 会自动的在 template 文件夹寻找这个模板文件渲染,并且会给这个模板文件传入 page、paginator、query 等参数。其中 page 和paginator 分别s是 django 内置的 page 类和 paginator 类的对象,query 是查询的关键字。我们可以通过 page.object_list 获取到查找出来的数据。示例代码如下:

 

原文地址:https://www.cnblogs.com/renshaoqi/p/10836707.html