欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django 使用全局搜索功能的實(shí)例詳解

 更新時間:2019年07月18日 08:43:43   作者:瘋狂打碼中  
今天小編就為大家分享一篇django 使用全局搜索功能的實(shí)例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

安裝需要的包

1 第一步:

全文檢索不同于特定字段的模糊查詢,使用全文檢索的效率更高,并且能夠?qū)τ谥形倪M(jìn)行分詞處理。

haystack:全文檢索的框架,支持whoosh、solr、Xapian、Elasticsearc四種全文檢索引擎

whoosh:純Python編寫的全文搜索引擎對于小型的站點(diǎn),whoosh已經(jīng)足夠使用

jieba:一款免費(fèi)的中文分詞包

1)在虛擬環(huán)境中依次安裝需要的包。

pip install django-haystack
pip install whoosh
pip install jieba

2 注冊app

INSTALLED_APPS = (
  ...
  'haystack',
)

創(chuàng)建的models

  class GoodInfo(models.Model):
    message = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
      return self.message

3 在settings 中配置搜索引擎

# 全文搜索引擎的配置
HAYSTACK_CONNECTIONS = {
  'default': {
    # 使用whoosh引擎
    'ENGINE': 'haystack.backend.whoosh_cn_backend.WhooshEngine',
    # 索引文件路徑
    'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
  }
}

#當(dāng)添加、修改、刪除數(shù)據(jù)時,自動生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

4 在項(xiàng)目的urls.py中添加搜索的配置。

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

5 在創(chuàng)建的app目錄下創(chuàng)建search_indexes.py 編寫一下程序

from haystack import indexes
from .models import GoodInfo

# 對指定的某個類的某些數(shù)據(jù)建立索引
class GoodInfoIndex(indexes.SearchIndex, indexes.Indexable):
  text = indexes.CharField(document=True, use_template=True)

  def get_model(self):
    return GoodInfo

  def index_queryset(self, using=None):
    return self.get_model().objects.all()

6 在templates目錄下創(chuàng)建"search/indexes/app06/"目錄。(app06 為自己創(chuàng)建的app的名稱)

在文件夾中創(chuàng)建 "goodinfo_text.txt"文件。 (goodinfo 為自己創(chuàng)建的數(shù)據(jù)庫的名稱)

  #指定索引的屬性
    {{object.content}} (content 為自己創(chuàng)建的表的一個字段 把這個字段指定為索引字段)

7 找到虛擬環(huán)境django下安裝的haystack目錄。

/home/python/.virtualenvs/django/lib/python2.7/site-packages/haystack/backends/

在上面的目錄中創(chuàng)建ChineseAnalyzer.py文件。

  import jieba
  from whoosh.analysis import Tokenizer, Token

  class ChineseTokenizer(Tokenizer):
    def __call__(self, value, positions=False, chars=False,
           keeporiginal=False, removestops=True,
           start_pos=0, start_char=0, mode='', **kwargs):
      t = Token(positions, chars, removestops=removestops, mode=mode,
           **kwargs)
      seglist = jieba.cut(value, cut_all=True)
      for w in seglist:
        t.original = t.text = w
        t.boost = 1.0
        if positions:
          t.pos = start_pos + value.find(w)
        if chars:
          t.startchar = start_char + value.find(w)
          t.endchar = start_char + value.find(w) + len(w)
        yield t

  def ChineseAnalyzer():
    return ChineseTokenizer()

8)復(fù)制whoosh_backend.py文件,改為如下名稱:

注意:復(fù)制出來的文件名,末尾會有一個空格,記得要刪除這個空格。

whoosh_cn_backend.py

9)打開復(fù)制出來的新文件,引入中文分析類,內(nèi)部采用jieba分詞。

from .ChineseAnalyzer import ChineseAnalyzer

10)更改詞語分析類。

查找

analyzer=StemmingAnalyzer()

改為

analyzer=ChineseAnalyzer()

11)初始化索引數(shù)據(jù)。

python manage.py rebuild_index

按照提示 輸入 y 后 生成索引 在主目錄下 會生成一個whoosh_index 文件夾 其中放置三個索引文件

配置好后 就該開始使用了

按照配置,在admin管理中添加數(shù)據(jù)后,會自動為數(shù)據(jù)創(chuàng)建索引,可以直接進(jìn)行搜索,可以先創(chuàng)建一些測試數(shù)據(jù)。

1)在app06/views.py中定義視圖query。

def query(request):
  return render(request,'booktest/query.html')

2)在app06/urls.py中配置。

  url(r'^query/', views.query),

3)在templates/app06/目錄中創(chuàng)建模板query.html。

參數(shù)q表示搜索內(nèi)容,傳遞到模板中的數(shù)據(jù)為query。

<html>
<head>
  <title>全文檢索</title>
</head>
<body>
<form method='get' action="/search/" target="_blank">( 提交的路徑就是 在urls 中配置的)
  <input type="text" name="q"> # (這里注意 input的name屬性 必須是 q 不能改變)
  <br>
  <input type="submit" value="查詢">
</form>
</body>
</html>

4)自定義搜索結(jié)果模板:在templates/search/目錄下創(chuàng)建search.html。

搜索結(jié)果進(jìn)行分頁,視圖向模板中傳遞的上下文如下:

(這個上下文 是 搜素引擎自動給返回的 不需要我們自己去寫視圖函數(shù)來進(jìn)行返回 直接進(jìn)行使用就可以)

query:搜索關(guān)鍵字

page:當(dāng)前頁的page對象

paginator:分頁paginator對象

視圖接收的參數(shù)如下:

參數(shù)q表示搜索內(nèi)容,傳遞到模板中的數(shù)據(jù)為query

參數(shù)page表示當(dāng)前頁碼

<html>
<head>
  <title>全文檢索--結(jié)果頁</title>
</head>
<body>
<h1>搜索&nbsp;<b>{{query}}</b>&nbsp;結(jié)果如下:</h1>
<ul>
{%for item in page%}  (注意這里面的對象的獲取方式 )
  <li>{{item.object.id}}--{{item.object.content|safe}}</li>
{%empty%}
  <li>啥也沒找到</li>
{%endfor%}
</ul>
<hr>
{%for pindex in page.paginator.page_range%} (后面的是返回的是全部的頁碼)
  {%if pindex == page.number%} (page.number) 返回的是當(dāng)前的頁碼
    {{pindex}}&nbsp;&nbsp;
  {%else%} (按照頁碼進(jìn)行翻頁的時候 也要注意 這樣的翻頁方式)
    <a href="?q={{query}}&amp;page={{pindex}}" rel="external nofollow" >{{pindex}}</a>&nbsp;&nbsp;
  {%endif%}
{%endfor%}
</body>
</html>

5)運(yùn)行服務(wù)器,在瀏覽器中輸入如下地址:

http://127.0.0.1:8000/query/

以上這篇django 使用全局搜索功能的實(shí)例詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python?爬取豆瓣電影短評并利用wordcloud生成詞云圖

    python?爬取豆瓣電影短評并利用wordcloud生成詞云圖

    這篇文章主要介紹了python?爬取豆瓣電影短評并利用wordcloud生成詞云圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • 淺談pandas中空值的處理方法

    淺談pandas中空值的處理方法

    本文主要介紹了淺談pandas中空值的處理方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python中進(jìn)程的調(diào)度算法詳解

    Python中進(jìn)程的調(diào)度算法詳解

    這篇文章主要介紹了Python中進(jìn)程的調(diào)度算法詳解,要想多個進(jìn)程交替運(yùn)行,操作系統(tǒng)必須對這些進(jìn)程進(jìn)行調(diào)度,這個調(diào)度也不是隨即進(jìn)行的,而是需要遵循一定的法則,由此就有了進(jìn)程的調(diào)度算法,需要的朋友可以參考下
    2023-07-07
  • 一文帶你了解Python中的生成器和迭代器

    一文帶你了解Python中的生成器和迭代器

    生成器(Generators)和迭代器(Iterators)是 Python 中用于處理序列數(shù)據(jù)的強(qiáng)大工具,本文主要來和大家介紹一下它們的具體使用,方便大家更好的了解它們,需要的可以學(xué)習(xí)下
    2022-03-03
  • Python中日志模塊logging的使用技巧和應(yīng)用詳解

    Python中日志模塊logging的使用技巧和應(yīng)用詳解

    在Python開發(fā)中,日志記錄是一個非常重要的環(huán)節(jié),它不僅有助于開發(fā)者追蹤程序的執(zhí)行流程,還能在出現(xiàn)問題時提供關(guān)鍵信息,幫助快速定位并解決問題,本文將結(jié)合實(shí)際案例,詳細(xì)介紹logging模塊的基礎(chǔ)用法和高級特性,需要的朋友可以參考下
    2024-08-08
  • Python工具PDB調(diào)試器的使用方法詳解

    Python工具PDB調(diào)試器的使用方法詳解

    還記得你是如何進(jìn)行代碼調(diào)試的嗎?有人會說,我是添加一些輸出語句,有人說,我是使用IDE自帶的設(shè)置斷點(diǎn)功能,當(dāng)然都沒有錯,只是看哪個更合適,更能提升效率,但這都不是我們今天講的重點(diǎn),今天的重點(diǎn)是Python中PDB調(diào)試器的使用方法,需要的朋友可以參考下
    2023-11-11
  • Python必備基礎(chǔ)之閉包和裝飾器知識總結(jié)

    Python必備基礎(chǔ)之閉包和裝飾器知識總結(jié)

    都2021年了Python的閉包和裝飾器難道你還不會?今天就帶大家詳細(xì)總結(jié)一下Python閉包和裝飾器的相關(guān)知識,需要的朋友可以參考下
    2021-06-06
  • 使用Python讀取.nc文件的方法詳解

    使用Python讀取.nc文件的方法詳解

    .nc文件,即NetCDF(Network?Common?Data?Form)文件,是一種用于存儲科學(xué)數(shù)據(jù)的文件格式,本文主要為大家介紹了兩種常見的讀取方法,希望對大家有所幫助
    2024-03-03
  • 圖文詳解寶塔centos7安裝Conda的步驟

    圖文詳解寶塔centos7安裝Conda的步驟

    在centos7上安裝anaconda碰到很多的坑,分享出來,也免得以后自己忘記,下面這篇文章主要給大家介紹了關(guān)于寶塔centos7安裝Conda的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 用于業(yè)余項(xiàng)目的8個優(yōu)秀Python庫

    用于業(yè)余項(xiàng)目的8個優(yōu)秀Python庫

    今天小編就為大家分享一篇用于業(yè)余項(xiàng)目的8個大型Python庫,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-09-09

最新評論