最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

安裝需要的包

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ù)時(shí),自動(dòng)生成索引
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

# 對指定的某個(gè)類的某些數(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)建的表的一個(gè)字段 把這個(gè)字段指定為索引字段)

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ù)制出來的文件名,末尾會(huì)有一個(gè)空格,記得要?jiǎng)h除這個(gè)空格。

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 后 生成索引 在主目錄下 會(huì)生成一個(gè)whoosh_index 文件夾 其中放置三個(gè)索引文件

配置好后 就該開始使用了

按照配置,在admin管理中添加數(shù)據(jù)后,會(huì)自動(dòng)為數(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)行分頁,視圖向模板中傳遞的上下文如下:

(這個(gè)上下文 是 搜素引擎自動(dòng)給返回的 不需要我們自己去寫視圖函數(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)行翻頁的時(shí)候 也要注意 這樣的翻頁方式)
    <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)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 安裝Anaconda3及使用Jupyter的方法

    安裝Anaconda3及使用Jupyter的方法

    這篇文章主要介紹了安裝Anaconda3及使用Jupyter的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python3實(shí)現(xiàn)小球轉(zhuǎn)動(dòng)抽獎(jiǎng)小游戲

    python3實(shí)現(xiàn)小球轉(zhuǎn)動(dòng)抽獎(jiǎng)小游戲

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)小球轉(zhuǎn)動(dòng)抽獎(jiǎng)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • PyMySQL實(shí)現(xiàn)增刪查改的簡單使用

    PyMySQL實(shí)現(xiàn)增刪查改的簡單使用

    這篇文章主要介紹了PyMySQL實(shí)現(xiàn)增刪查改的簡單使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Django實(shí)現(xiàn)WebSocket在線聊天室功能(channels庫)

    Django實(shí)現(xiàn)WebSocket在線聊天室功能(channels庫)

    本文基于channels庫Django實(shí)現(xiàn)WebSocket在線聊天室功能,包括安裝及創(chuàng)建django項(xiàng)目的全過程,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • OpenCV圖像修復(fù)cv2.inpaint()的使用

    OpenCV圖像修復(fù)cv2.inpaint()的使用

    這篇博客將介紹如何通過OpenCV中圖像修復(fù)的技術(shù)——cv2.inpaint() 去除舊照片中的小噪音、筆劃等。并提供一個(gè)可交互式的程序,感興趣的可以了解一下
    2021-08-08
  • python實(shí)現(xiàn)ID3決策樹算法

    python實(shí)現(xiàn)ID3決策樹算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)ID3決策樹算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Django 數(shù)據(jù)庫同步操作技巧詳解

    Django 數(shù)據(jù)庫同步操作技巧詳解

    這篇文章主要介紹了Django 數(shù)據(jù)庫同步操作技巧詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python中處理Session和Cookie的方法

    Python中處理Session和Cookie的方法

    這篇文章主要介紹了Python中處理Session和Cookie的方法,本文介紹了Python中如何處理Session和Cookie,包括獲取、設(shè)置、刪除和使用Session和Cookie的相關(guān)方法和技巧,主要涉及Python的requests、http.cookiejar和Flask等庫和框架
    2023-05-05
  • Python學(xué)習(xí)之字符串常用操作詳解

    Python學(xué)習(xí)之字符串常用操作詳解

    字符串是Pyhon中的常用的數(shù)據(jù)類型,這篇文章主要為大家詳細(xì)介紹一下python字符串的一些常用操作,文中示例代碼講解詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Python中緩存lru_cache的基本介紹和講解

    Python中緩存lru_cache的基本介紹和講解

    緩存是一種將定量數(shù)據(jù)加以保存以備迎合后續(xù)請求的處理方式,旨在加快數(shù)據(jù)的檢索速度,下面這篇文章主要給大家介紹了關(guān)于Python中緩存lru_cache的基本介紹和講解的相關(guān)資料,需要的朋友可以參考下
    2022-01-01

最新評(píng)論

英吉沙县| 时尚| 行唐县| 尖扎县| 武城县| 榆林市| 锡林浩特市| 仙游县| 来安县| 民权县| 宝兴县| 酒泉市| 涞水县| 沛县| 潢川县| 连州市| 八宿县| 青海省| 宝应县| 宜丰县| 扶沟县| 安新县| 桐梓县| 台江县| 加查县| 琼结县| 准格尔旗| 庐江县| 南昌市| 鞍山市| 棋牌| 东乌| 台北县| 汾西县| 华亭县| 阳山县| 亚东县| 秦皇岛市| 乌苏市| 北海市| 逊克县|