Django haystack實現全文搜尋

2022-04-03 00:56:25 字數 3809 閱讀 2993

原文:

- project

- project

- settings.py

- blog

- models.py

models.py的內容假設如下:

from django.db import models

from django.contrib.auth.models import user

class note(models.model):

user = models.foreignkey(user)

pub_date = models.datetimefield()

title = models.charfield(max_length=200)

body = models.textfield()

def __str__(self):

return self.title

1. 首先安裝各工具

pip install whoosh django-haystack jieba
'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.sites',

# added. haystack先新增,

'haystack',

'blog',

]3. 修改 你的 settings.py,以配置引擎

本教程使用的是whoosh,故配置如下:

import os

haystack_connections = ,

}

其中顧名思義,engine為使用的引擎必須要有,如果引擎是whoosh,則path必須要填寫,其為whoosh 索引檔案的存放資料夾。

其他引擎的配置見官方文件

4.建立索引

import datetime

from haystack import indexes

class noteindex(indexes.searchindex, indexes.indexable):

text = indexes.charfield(document=true, use_template=true)

author = indexes.charfield(model_attr='user')

pub_date = indexes.datetimefield(model_attr='pub_date')

def get_model(self):

return note

def index_queryset(self, using=none):

"""used when the entire index for model is updated."""

return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now())

每個索引裡面必須有且只能有乙個欄位為document=true,這代表haystack 和搜尋引擎將使用此字段的內容作為索引進行檢索(primary field)。其他的字段只是附屬的屬性,方便呼叫,並不作為檢索資料。

注意:如果使用乙個字段設定了document=true,則一般約定此欄位名為text,這是在searchindex類裡面一貫的命名,以防止後台混亂,當然名字你也可以隨便改,不過不建議改。

}}}

這個資料模板的作用是對note.title,note.user.get_full_name,note.body這三個字段建立索引,當檢索的時候會對這三個欄位做全文檢索匹配。

5.在url配置中新增searchview,並配置模板

urls.py中配置如下url資訊,當然url路由可以隨意寫。

(r'^search/', include('haystack.urls')),

其實haystack.urls的內容為,

from django.conf.urls import url

from haystack.views import searchview

urlpatterns = [

url(r'^$', searchview(), name='haystack_search'),

]

所以需要在blog/templates/search/下新增search.html檔案,內容為

searchh2>

} td>

td>

tr>

table>

resultsh3>

}a>

p>

no results found.p>

« previousa>

|next »a>

div>

form>

很明顯,它自帶了分頁。

6.最後一步,重建索引檔案

使用python manage.py rebuild_index或者使用update_index命令。

好,下面執行專案,進入該url搜尋一下試試吧。

第一步將檔案whoosh_backend.py(該檔案路徑為python路徑/lib/python3.4/site-packages/haystack/backends/whoosh_backend.py

修改為如下

schema_fields[field_class.index_fieldname] =text(stored=true, analyzer=chineseanalyzer(),

field_boost=field_class.boost)

第二步

settings.py中修改引擎,如下

import os

haystack_connections = ,

}

第三步

重建索引,在進行搜尋中文試試吧。

索引自動更新

如果沒有索引自動更新,那麼每當有新資料新增到資料庫,就要手動執行update_index命令是不科學的。自動更新索引的最簡單方法在

settings.py新增乙個訊號。

haystack_signal_processor =

"haystack.signals.realtimesignalprocessor"

官方文件

看了這入門篇,你現在應該大概能配置乙個簡單的全文搜尋了吧,如果想自定義怎麼辦? 建議閱讀官方文件和github的原始碼。

Django haystack實現全文搜尋

搜尋可以使用最原始的like的方式進行搜尋。當然這種搜尋方式對於些小的資料是非常合適的。但是隨著資料越來越大。這時候我們就需要使用搜尋引擎了。搜尋引擎會將所有要搜尋的資料使用演算法做個素引,以後搜尋的時候就只需要根據這個索引腳找到相應的資料。搜尋引擎做索引的過程會比較慢,但是一旦索引建立完成,那麼以...

django haystack實現全文檢索

haystack配置使用 前後端分離 索引檔案生成 替換成jieba分詞 索引檔案使用 1.haystack是django的開源搜尋框架,該框架支援solr,elasticsearch,whoosh,xapian 搜尋引擎,不用更 改 直接切換引擎,減少 量。2.搜尋引擎使用whoosh,這是乙個由...

django haystack外掛程式基本使用操作流程

搜尋可以使用最原始的模糊匹配的like方式進行搜尋。當然這種搜尋方式對於一些小量的資料是非常合適的。但是隨著資料量越來越大。這時候我們就需要使用搜尋引擎了。搜尋引擎會將所有需要搜尋的資料使用演算法做乙個索引,以後搜尋的時候就只需要根據這個索引即可找到相應的資料。搜尋引擎做索引的過程會比較慢,甚至占用...