搜索插件(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 獲取到查找出來的數據。示例代碼如下:

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM