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

Django實(shí)現(xiàn)全文檢索的方法(支持中文)

 更新時(shí)間:2018年05月14日 08:30:09   作者:___大魚___  
這篇文章主要介紹了Django實(shí)現(xiàn)全文檢索的方法(支持中文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

PS: 我的檢索是在文章模塊下 forum/article

第一步:先安裝需要的包:

pip install django-haystack
pip install whoosh
pip install jieba

第二步: 配置需要的文件 settings.py

添加haystack應(yīng)用模塊

INSTALLED_APPS = (
   ...
  'haystack',
   ...
)

在settings.py 末尾添加

HAYSTACK_CONNECTIONS = {
  'default': {
    'ENGINE': 'article.whoosh_cn_backend.WhooshEngine',
    'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
  },
}
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'  # 索引自動(dòng)更新

第三步: 配置url路徑

在 forum/forum/urls.py中包含search路徑

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

第四步:建立模型

forum/article/models.py

class Article(models.Model):
  '''
  文章數(shù)據(jù)模型
  '''
  id = models.AutoField(primary_key=True,verbose_name='文章編號(hào)')
  title = models.CharField(max_length=50,verbose_name='文章標(biāo)題')
  content = MDTextField()
  publish_time = models.DateTimeField(auto_now_add=True,verbose_name='發(fā)表時(shí)間')
  last_update_time = models.DateTimeField(auto_now=True,verbose_name='最后一次修改時(shí)間')
  status = models.IntegerField(u'狀態(tài)', default=1) 
  read_count = models.IntegerField(default=0,verbose_name='閱讀次數(shù)')
  comment_count = models.IntegerField(default=0,verbose_name='評(píng)論次數(shù)')

  #關(guān)聯(lián)用戶
  user = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用戶')
  subject = models.ForeignKey(Subject, null=True, blank=True, on_delete=models.CASCADE,
                verbose_name='屬于哪一個(gè)專題')

第五步:設(shè)置為那個(gè)class建立索引

如果你想針對(duì)某個(gè)app例如mainapp做全文檢索,則必須在mainapp的目錄下面建立search_indexes.py文件,文件名不能修改
例:forum/article/search_indexes.py模塊

from article.models import Article
from haystack import indexes


class ArticleIndex(indexes.SearchIndex, indexes.Indexable):

  text = indexes.CharField(document=True, use_template=True)

  def get_model(self):
    return Article

  def index_queryset(self, using=None):
    return self.get_model().objects.filter(status=1)

每個(gè)索引里面必須有且只能有一個(gè)字段為document=True

第六步: 確定我們需要的屬性:

新建yourapp/templates/search/indexes/yourapp/article_text.txt來(lái)指明需要屬性

例: article/templates/search/indexes/yourapp/article_text.txt

{{ object.title }} # 文章標(biāo)題
{{ object.user.username }} # 文章作者
{{ object.content }} # 文章內(nèi)容

第七步: 把搜索引擎放入項(xiàng)目下

例: forum/article/whoosh_cn_backend.py

將文件whoosh_backend.py(例: 我的python路徑E:\python\Lib\site-packages\haystack\backends\whoosh_backend.py
)放到article下,并重命名為whoosh_cn_backend.py,例如blog/whoosh_cn_backend.py。修改如下:

導(dǎo)入 

from jieba.analyse import ChineseAnalyzer

找到

復(fù)制代碼 代碼如下:
schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=StemmingAnalyzer(), field_boost=field_class.boost, sortable=True)

然后將其修改為

復(fù)制代碼 代碼如下:
schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=ChineseAnalyzer(), field_boost=field_class.boost, sortable=True)

成功引入jieba分詞

第八步: 前端頁(yè)面配置

templates/base.html (搜索頁(yè)面)

 <form class="navbar-form navbar-left" action="/search/" method="get">
        <div class="form-group">
          <input type="text" class="form-control" name="q" placeholder="請(qǐng)輸入搜索的內(nèi)容" value=""/>
        </div>
        <input type="submit" value="搜索">
      </form>

結(jié)果展示頁(yè)面(forum/article/templates/search/search.html)

{% extends 'base.html' %}

{% block title %}搜索結(jié)果{% endblock %}

{% block content %}
<div class="container" id="content">
  <div class="search-body">

  <form method="get" action="">
    <table>
      <tr>
        <td>
          <label for="id_q"></label>
        </td>
        <td>
          <input class="form-control" id="id_q" name="q" type="search" value="{{ query }}" />
        </td>

        <td>&nbsp;</td>
        <td>
          <button class="btn btn-defaul" type="submit"><span class="glyphicon glyphicon-search">搜索</span></button>
        </td>
      </tr>


    </table>
</form>
    {% if query %}
      <h3>搜索結(jié)果</h3>

      <table class="table">
      <tr>

         {% for result in page.object_list %}
           <td>
        <p>
          <a href="{% url 'article:article_detail' article_id=result.object.id %}" rel="external nofollow" >
            {{ result.object.title }}</a>
        </p> 作者: <a href="{% url 'user:user_index' result.object.user.id %}" rel="external nofollow" >{{ result.object.user.username }}</a>
        <p>{{ result.object.content | safe | truncatechars_html:40 }}</p>
      </td>
      </tr>

      {% empty %}
        <p>沒(méi)有得到想要的結(jié)果哦.</p>
      {% endfor %}
      </table>


      {% if page.has_previous or page.has_next %}
        <div>
          {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}" rel="external nofollow" >{% endif %}&laquo; 上一頁(yè){% if page.has_previous %}</a>{% endif %}
          |
          {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}" rel="external nofollow" >{% endif %}下一頁(yè) &raquo;{% if page.has_next %}</a>{% endif %}
        </div>
      {% endif %}
    {% else %}
      {# Show some example queries to run, maybe query syntax, something else? #}
    {% endif %}


  </div>

</div>
{% endblock %}

第九步: 建立索引

python manage.py rebuild_index

建立成功會(huì)自行生成一個(gè)forum/whoosh_index的文件夾

第十步: 運(yùn)行程序

python manage.py runserver

PS: 模板樣式可以自行調(diào)整

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Sanic框架異常處理與中間件操作實(shí)例分析

    Sanic框架異常處理與中間件操作實(shí)例分析

    這篇文章主要介紹了Sanic框架異常處理與中間件操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了Sanic框架拋出異常、異常處理、中間件、監(jiān)聽器相關(guān)原理與操作技巧,需要的朋友可以參考下
    2018-07-07
  • selenium+opencv實(shí)現(xiàn)滑塊驗(yàn)證碼的登陸

    selenium+opencv實(shí)現(xiàn)滑塊驗(yàn)證碼的登陸

    很多網(wǎng)站登錄登陸時(shí)都要用到滑塊驗(yàn)證碼,本文主要介紹了selenium+opencv實(shí)現(xiàn)滑塊驗(yàn)證碼的登陸,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python中將文件從一個(gè)服務(wù)器復(fù)制到另一個(gè)服務(wù)器的4種方法

    Python中將文件從一個(gè)服務(wù)器復(fù)制到另一個(gè)服務(wù)器的4種方法

    Python中將文件從一個(gè)服務(wù)器復(fù)制到另一個(gè)服務(wù)器通常涉及到網(wǎng)絡(luò)傳輸,這個(gè)過(guò)程可以通過(guò)多種方式實(shí)現(xiàn),本文主要為大家介紹了4種常用方法,需要的可以參考下
    2024-10-10
  • 使用python?xmlrpc連接odoo方式

    使用python?xmlrpc連接odoo方式

    這篇文章主要介紹了使用python?xmlrpc連接odoo方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python retrying 重試機(jī)制的使用方法

    Python retrying 重試機(jī)制的使用方法

    我們?cè)诔绦蜷_發(fā)中,經(jīng)常會(huì)需要請(qǐng)求一些外部的接口資源,而且我們不能保證每次請(qǐng)求一定會(huì)成功,所以這些涉及到網(wǎng)絡(luò)請(qǐng)求的代碼片段就需要加上重試機(jī)制。本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Django實(shí)現(xiàn)登錄隨機(jī)驗(yàn)證碼的示例代碼

    Django實(shí)現(xiàn)登錄隨機(jī)驗(yàn)證碼的示例代碼

    登錄驗(yàn)證碼是每個(gè)網(wǎng)站登錄時(shí)的基本標(biāo)配,這篇文章主要介紹了Django實(shí)現(xiàn)登錄隨機(jī)驗(yàn)證碼的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 快速創(chuàng)建python 虛擬環(huán)境

    快速創(chuàng)建python 虛擬環(huán)境

    這篇文章主要介紹了快速創(chuàng)建python 虛擬環(huán)境的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • python實(shí)現(xiàn)桌面氣泡提示功能

    python實(shí)現(xiàn)桌面氣泡提示功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)桌面氣泡提示功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python面向?qū)ο笾接袑傩院退接蟹椒☉?yīng)用案例分析

    Python面向?qū)ο笾接袑傩院退接蟹椒☉?yīng)用案例分析

    這篇文章主要介紹了Python面向?qū)ο笾接袑傩院退接蟹椒?結(jié)合具體案例形式簡(jiǎn)單分析了面向?qū)ο蟪绦蛟O(shè)計(jì)中私有屬性與私有方法的基本功能與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • 詳解Python讀取和寫入操作CSV文件的方法

    詳解Python讀取和寫入操作CSV文件的方法

    CSV 文件(逗號(hào)分隔值文件)是一種純文本文件,它使用特定的結(jié)構(gòu)來(lái)排列表格數(shù)據(jù)。本文將詳細(xì)介紹Python中讀取個(gè)寫入操作CSV文件的方法,需要的可以參考一下
    2022-03-03

最新評(píng)論

正蓝旗| 灵台县| 巴林左旗| 清丰县| 黄龙县| 夹江县| 余姚市| 纳雍县| 南漳县| 阳泉市| 平远县| 密山市| 澄城县| 瑞安市| 墨竹工卡县| 松阳县| 大冶市| 将乐县| 蒙山县| 英超| 黄骅市| 静安区| 陆河县| 西充县| 民县| 绿春县| 胶南市| 太仓市| 济阳县| 吉木萨尔县| 同德县| 青龙| 扎囊县| 上杭县| 香格里拉县| 寻甸| 融水| 彰化市| 平远县| 晋宁县| 鄂温|