zoukankan      html  css  js  c++  java
  • 搜索插件(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 获取到查找出来的数据。示例代码如下:

     

  • 相关阅读:
    cd的使用
    转换器模式
    装饰模式
    策略模式
    模板方法模式
    工厂模式
    类型信息
    proto编译组件使用
    proto编译引用外部包问题
    Kafka经典三大问:数据有序丢失重复
  • 原文地址:https://www.cnblogs.com/renshaoqi/p/10836707.html
Copyright © 2011-2022 走看看