日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django 搜索

發布時間:2024/10/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django 搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搜索

談搜索,不得不提es,全名 Elasticsearch。

自行實現django框架和全文檢索引擎的代碼比較麻煩,抱著不重復造輪子的原則。

選用django的第三方包djangohaystack。它支持多種全文檢索引擎,本項目選擇最流行的全文檢索引擎之一elasticsearch。

安裝elasticsearch很艱難,推薦使用docker,不要安裝windows,會強制下載VirtualBox會與vm沖突的

docker

什么是docker?

  • 簡化創建,部署,運行應用程序的一個工具
  • 打包應用程序所需的庫和依賴環境
  • 精簡的虛擬機

docker vs 虛擬機

安裝

https://docs.docker.com/install/

  • 版本 ce和ee

Docker Engine改為Docker CE(社區版)

Docker Data Center改為Docker EE(企業版)

下面是ubuntu下安裝(來源官網)

如果是第一次安裝,你需要先添加docker的源然后再安裝

  • 更新包
  • $?sudo?apt-get?update
  • 安裝證書
  • $?sudo?apt-get?install?\
    ????apt-transport-https?\
    ????ca-certificates?\
    ????curl?\
    ????gnupg-agent?\
    ????software-properties-common
  • 添加docker的官方GPGkey
  • $?curl?-fsSL?https://download.docker.com/linux/ubuntu/gpg?|?sudo?apt-key?add?-
  • 添加docker源
  • $?sudo?add-apt-repository?\
    ???"deb?[arch=amd64]?https://download.docker.com/linux/ubuntu?\
    ???$(lsb_release?-cs)?\
    ???stable"

    安裝 docker ce

  • 更新包索引
  • $?sudo?apt-get?update
  • 安裝docker
  • $?sudo?apt-get?install?docker-ce
  • 檢測是否安裝成功
  • $?sudo?docker?run?hello-world

    安裝成功會出現如下輸出:Hello from Docker!

    先鏡像加速,不然你會懷疑人生的

    編輯文件/etc/docker/daemon.json,沒有就新建。加入以下項目

    下面的源可以改掉

    {
    ????"registry-mirrors":?["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
    }


    {
    ??"registry-mirrors":?["https://nelhtz00.mirror.aliyuncs.com"]
    }

    鏡像和容器的概念

    就像類和實例的類,鏡像就是類,容器就是對象

    補充docker命令

    去docker 官方下載
    Shell docker pull <name>:16.04

    運行鏡像文件。

    docker?run?-i?-t
    docker?run?<image-id>
    docker?run?-p?<port1>:<port2>?<name>

    查看鏡像文件。

    docker?image?ls
    docker?images

    刪除鏡像文件。

    docker?rmi?<name>
    docker?rmi?fce289e99eb9?-f

    查看正在運行容器。

    docker?ps

    停止運行的容器。

    docker?stop?<container-id>
    docker?stop?<name>

    對于那些不會自動終止的容器,就可以用下面的方式來停止。

    docker?container?kill?<container-id>

    吹了那些多docker,連es都沒吹

    搜索功能環境搭建

    docker的鏡像:https://hub.docker.com/

    注意:因為haystack目前支持的elasticsearch版本為 1.x和2.x

    所以這里選擇2.4.6

    $?docker?pull?elasticsearch:2.4.6

    但是外國人開發的,所以安裝中文分詞插件elasticsearch-ik,不安裝分不了中文詞,搜不了中文

    下載es-ik后,將其解壓到名為ik的文件夾

    ~$?unzip?elasticsearch-analysis-ik-1.10.6.zip?-d?./ik

    ik所在文件下創建名為Dockerfile的文件,內容如下

    FROM????elasticsearch:2.4.6
    MAINTAINER????Fisher?""??你下載docker注冊的郵箱??名字@郵箱
    ADD?????./ik/?/usr/share/elasticsearch/plugins/ik/??

    將Dockerfile同步在ubuntu

    sudo?docker?build?-t??你的名字/els-ik:2.4.6?.

    運行成功后,會在你的docker中創建一個新的鏡像叫做 你的名字/els-ik

    最后運行curl命令檢測es是否正常

    ~$?curl?http://127.0.0.1:9200
    {
    ??"name"?:?"Shard",
    ??"cluster_name"?:?"elasticsearch",
    ??"cluster_uuid"?:?"Pq6BQQhTQN6q6ML6ThPlbw",
    ??"version"?:?{
    ????"number"?:?"2.4.6",
    ????"build_hash"?:?"5376dca9f70f3abef96a77f4bb22720ace8240fd",
    ????"build_timestamp"?:?"2017-07-18T12:17:44Z",
    ????"build_snapshot"?:?false,
    ????"lucene_version"?:?"5.5.4"
    ??},
    ??"tagline"?:?"You?Know,?for?Search"
    }

    djangohaystack

    pip?install?django-haystack
    • settings.py

    添加'haystack'

    INSTALLED_APPS?=?[
    ????#?'django.contrib.admin',
    ????'django.contrib.auth',
    ????'django.contrib.contenttypes',
    ????'django.contrib.sessions',
    ????'django.contrib.messages',
    ????'django.contrib.staticfiles',
    ????'haystack',
    ]

    補充settings.py

    HAYSTACK_CONNECTIONS?=?{
    ????'default':?{
    ????????'ENGINE':?'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
    ????????'URL':?'http://127.0.0.1:9200/',????#?此處為elasticsearch運行的服務器ip地址和端口
    ????????'INDEX_NAME':?'',???????????#?指定elasticserach建立的索引庫名稱
    ????},
    }
    #?搜索結果每頁顯示數量
    HAYSTACK_SEARCH_RESULTS_PER_PAGE?=?5
    #?實時更新index
    HAYSTACK_SIGNAL_PROCESSOR?=?'haystack.signals.RealtimeSignalProcessor'

    haystack操作es還需要python的es驅動。

    官網 :https://github.com/elastic/elasticsearch-py

    pip?install?elasticsearch==2.4.1

    至此,環境搭建完成。相對應的es,es-ik,haystack,es-python的版本請保持一致。django支持2.x版本,es到了7.x版本

    使用

    下面代碼來源項目,無需看懂,知道怎么搞就可以了

    在需要搜索的app,創建search_indexes.py文件

    創建haystack數據模型

    from?haystack?import?indexes
    from?.models?import?News


    class?NewsIndex(indexes.SearchIndex,?indexes.Indexable):
    ????"""
    ????這個模型的作用類似django的模型,它告訴haystack哪些數據會被
    ????放進查詢回的模型對象中,以及通過哪些字段進行索引和查詢
    ????"""

    ????#?這字段必須這么寫,用來告訴haystack和搜索引擎要索引哪些字段
    ????text?=?indexes.CharField(document=True,?use_template=True)
    ????id?=?indexes.CharField(model_attr='id')
    ????title?=?indexes.CharField(model_attr='title')
    ????digest?=?indexes.CharField(model_attr='digest')
    ????content?=?indexes.CharField(model_attr='content')
    ????image_url?=?indexes.CharField(model_attr='image_url')

    ????def?get_model(self):
    ????????"""
    ????????返回建立索引的模型
    ????????:return:
    ????????"""

    ????????return?News

    ????def?index_queryset(self,?using=None):
    ????????"""
    ????????返回要建立索引的數據查詢集
    ????????:param?using:
    ????????:return:
    ????????"""

    ????????return?self.get_model().objects.filter(is_delete=False)

    創建索引數據模板

  • 在templates中創建文件search/indexes/yourappname/modelname_text.txt,所以本項目需要創建search/indexes/news/news_text.txt,文件內容如下:
  • ???{{?object.title?}}
    ???{{?object.digest?}}
    ???{{?object.content?}}
    ???{{?object.author.username?}}
  • 創建索引

    按上面的步驟配置好后,就可以運行haystack的命令創建索引了

    ~$?python?manage.py?rebuild_index
  • 視圖編寫

  • from?haystack.generic_views?import?SearchView

    class?NewsSearchView(SearchView):
    ????"""
    ????新聞搜索視圖
    ????"""

    ????#?設置搜索模板文件
    ????template_name?=?'news/search.html'

    ????#?重寫get請求,如果請求參數q為空,返回模型News的熱門新聞數據
    ????#?否則根據參數q搜索相關數據
    ????def?get(self,?request,?*args,?**kwargs):
    ????????query?=?request.GET.get('q')
    ????????if?not?query:
    ????????????#?顯示熱門新聞
    ????????????hot_news?=?HotNews.objects.select_related('news__tag').only('news__title',?'news__image_url',?'news_id',
    ????????????????????????????????????????????????????????????????????????'news__tag__name').filter(
    ????????????????is_delete=False).order_by('priority',?'-news__clicks')
    ????????????paginator?=?Paginator(hot_news,?settings.HAYSTACK_SEARCH_RESULTS_PER_PAGE)
    ????????????try:
    ????????????????page?=?paginator.get_page(int(request.GET.get('page')))
    ????????????except?Exception?as?e:
    ????????????????page?=?paginator.get_page(1)

    ????????????return?render(request,?'news/search.html',?context={
    ????????????????'page':?page,
    ????????????????'paginator':?paginator,
    ????????????????'query':?query
    ????????????})
    ????????else:
    ????????????#?搜索
    ????????????return?super().get(request,?*args,?**kwargs)

    ????def?get_context_data(self,?*args,?**kwargs):
    ????????"""
    ????????在context中添加page變量
    ????????:param?args:?
    ????????:param?kwargs:?
    ????????:return:?
    ????????"""

    ????????context?=?super().get_context_data(*args,?**kwargs)
    ????????if?context['page_obj']:
    ????????????context['page']?=?context['page_obj']
    ????????return?context

    路由

    在news/urls.py中添加如下路由

    python path('news/search/', views.NewsSearchView.as_view(), name='news_search')

    4.前端代碼

    總結

    以上是生活随笔為你收集整理的django 搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲黄色片在线观看 | 黄色片免费的 | 午夜精品久久久久久久91蜜桃 | 无码人妻精品一区二区 | 国产三级在线播放 | 中文黄色片 | 久久久av网站 | 天天性综合 | 91久久久久久久久久久久 | 欧美精产国品一二三区 | 日韩不卡一二三 | 国产高清精品一区 | 国产99久久久久久免费看 | 老湿福利影院 | 久久精品这里只有精品 | 久国产精品 | 亚州av片 | 欧美日韩xxxx | 国产网红在线观看 | 一本加勒比波多野结衣 | 91色视频 | 亚洲二区中文字幕 | 极品粉嫩小仙女高潮喷水久久 | 欧美日韩综合网 | 国产丰满农村老妇女乱 | 国产成人久久精品麻豆二区 | 亚洲一区二区天堂 | 国产国拍精品亚洲 | 中文字幕淫 | 伦理一级片| 手机看片福利视频 | 在线网站av | 天堂在线日本 | 国产aa视频 | 男人和女人日b视频 | 欧美v视频 | 毛茸茸日本熟妇高潮 | 东京热av一区 | 国产九色av | 国产亚韩 | 中文字幕在线观看网址 | 国产3级在线 | 日韩在线观看 | 久久久无码一区二区三区 | 免费日本黄色片 | 射美女 | 中文字幕亚洲在线 | 久久亚洲精品中文字幕 | 国产精品丝袜黑色高跟鞋 | 日本中文视频 | 免费看国产曰批40分钟粉红裤头 | 国产成人av在线 | 久久精品国产亚洲AV黑人 | 亚洲二区在线观看 | 国产欧美久久久精品免费 | 日日草日日干 | 国产中文在线播放 | 一本色道久久综合亚洲精品按摩 | 美女张开腿露出尿口 | 国产黄色影视 | 欧美一级特黄视频 | 午夜精品视频一区 | 2019av视频 | 久久首页 | 黄色a免费| 色婷五月天 | 丰满放荡岳乱妇91ww | 蜜桃视频久久一区免费观看入口 | 国产不卡在线观看视频 | 麻豆视频网| 99久久久无码国产精品免费麻豆 | 超碰碰碰碰 | 日在线视频| 日韩欧美亚洲一区 | 青青青免费在线视频 | 超碰免费看 | 国产精品100 | 97少妇| 中文字幕免费在线观看视频 | 欧美一级爱爱 | 久久久久久久91 | 中文理论片 | 琪琪电影午夜理论片八戒八戒 | 99久久精品无码一区二区毛片 | 精品无码一区二区三区免费 | 午夜视频福利网站 | 一区二区三区久久久久 | 九九精品热| 亚洲人 女学生 打屁股 得到 | 嫩草视频在线 | 久在线播放 | 精品日韩中文字幕 | 亚洲二区在线播放视频 | 26uuu成人网 国产精品久久久久久久久久直播 | 狠狠躁夜夜躁人人爽视频 | 日韩有码av | 91在线观看视频 | 久久精品无码一区二区三区 | av大片在线免费观看 |