国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能

瀏覽:6日期:2022-08-06 16:46:23
基于 python django

源碼

前期準(zhǔn)備

安裝庫(kù):

pip install django-haystackpip install whooshpip install jieba

如果pip 安裝超時(shí),可配置pip國(guó)內(nèi)源下載,如下:

pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com <安裝的庫(kù)>

pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com django

如果安裝 django-haystack 失敗,先安裝 setuptools_scm .在安裝 django-haystack.

pip install setuptools_scm項(xiàng)目

創(chuàng)建項(xiàng)目demo:

# django-admin startproject <項(xiàng)目名>django-admin startproject find

切入demo 終端操作,創(chuàng)建app:

# python manage.py startapp <APP名>python manage.py startapp searchshop

在 settings.py 文件 中的 INSTALLED_APPS 配置 注入 剛才創(chuàng)建APP( 路徑: find/find/settings.py):

INSTALLED_APPS = [...’searchshop’,...]

在創(chuàng)建的APP中添加模型

models.py 文件添加如下(路徑: find/searchshop/models.py):

class Shopp(models.Model): shop_name = models.TextField(max_length=200) shop_price = models.IntegerField(default=0) shop_dsc = models.CharField(max_length=200)

在app 中admin.py文件注冊(cè)模型:

admin.py 文件添加如下(路徑: find/searchshop/admin.py):

from .models import Shoppadmin.site.register(Shopp)

執(zhí)行命令,讓模型生效(修改模型時(shí),都要執(zhí)行一次,這樣模型才同步!!!):

python manage.py makemigrations python manage.py migrate創(chuàng)建后臺(tái)管理帳號(hào)

訪問(wèn)后臺(tái)可操作模型數(shù)據(jù):

python manage.py createsuperuser

運(yùn)行:

python manage.py runserver

訪問(wèn): http:127.0.0.1:8080/admin 登錄剛才設(shè)置帳號(hào),密碼即可進(jìn)入:

基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能

搭建站內(nèi)搜索

配置 haystack

在 settings.py 文件 中的 INSTALLED_APPS 配置最底部 注入 haystack( 路徑: find/find/settings.py):

INSTALLED_APPS = [...’haystack’]

在app內(nèi),添加 search_indexes.py (目錄:find/searchshop/search_indexes.py):

from haystack import indexesfrom .models import Shopp # 之前創(chuàng)建的模型# 修改此處,類名為模型類的名稱+Index,比如模型類為GoodsInfo,則這里類名為GoodsInfoIndex(其實(shí)可以隨便寫)class ArticlePostIndex(indexes.SearchIndex, indexes.Indexable): # text為索引字段 # document = True,這代表haystack和搜索引擎將使用此字段的內(nèi)容作為索引進(jìn)行檢索 # use_template=True 指定根據(jù)表中的那些字段建立索引文件的說(shuō)明放在一個(gè)文件中 text = indexes.CharField(document=True, use_template=True) # 對(duì)那張表進(jìn)行查詢 def get_model(self): # 重載get_model方法,必須要有!# 返回這個(gè)modelreturn Shopp # 建立索引的數(shù)據(jù) def index_queryset(self, using=None):# 這個(gè)方法返回什么內(nèi)容,最終就會(huì)對(duì)那些方法建立索引,這里是對(duì)所有字段建立索引return self.get_model().objects.all()

生成檢索索引

python manage.py rebuild_index

項(xiàng)目目錄多出whoosh_index文件夾.

修改分詞器

從 pyrhon 安裝路徑 ( Libsite-packageshaystackbackendswhoosh_backend.py) 復(fù)制一份到app中改名為 whoosh_cn_backend (find/searchshop/whoosh_cn_backend.py)在頂部引用:

from jieba.analyse import ChineseAnalyzer

找到 (查找 StemmingAnalyzer ) 位置:

schema_fields[field_class.index_fieldname] = TEXT( stored=True, analyzer=StemmingAnalyzer(), field_boost=field_class.boost, sortable=True,)

替換:

schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=ChineseAnalyzer(), field_boost=field_class.boost)

在 INSTALLED_APPS(路徑: find/find/settings.py) 配置后面 后面添加:

HAYSTACK_CONNECTIONS = { ’default’: {# 指定whoosh引擎 (之前創(chuàng)建的whoosh_cn_backend)’ENGINE’: ’searchshop.whoosh_cn_backend.WhooshEngine’,# ’ENGINE’: ’jsapp.whoosh_cn_backend.WhooshEngine’, # whoosh_cn_backend是haystack的whoosh_backend.py改名的文件為了使用jieba分詞# 索引文件路徑’PATH’: os.path.join(BASE_DIR, ’whoosh_index’), }} # 添加此項(xiàng),當(dāng)數(shù)據(jù)庫(kù)改變時(shí),會(huì)自動(dòng)更新索引,非常方便HAYSTACK_SIGNAL_PROCESSOR = ’haystack.signals.RealtimeSignalProcessor’

添加 templates

在APP中創(chuàng)建 templates文件夾.

添加內(nèi)容檢索內(nèi)容

在templates文件夾下創(chuàng)建文件夾 search -> indexes -> searchshop( search + APP名);路徑( 目錄: find/searchshoptemplatessearchindexessearchshop) 添加Shopp_text.txt(APP名_text.txt): (需要檢索的字段名)

{{object.shop_name}}{{object.shop_dsc}}{{object.shop_price}}

添加頁(yè)面模板

在templates文件夾下創(chuàng)建文件夾(searchshop) 下創(chuàng)建index.html:

{% load highlight %}<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>商品列表</title> <style>span.highlighted { color: red;} </style></head><body> <div class='search'><form method='get' action='{% url ’shop:search’ %}'> <input type='text' name='q' placeholder='a搜索商品'> <input type='submit' value='搜索'></form> </div> {% if shop_list and query %} <ul>{% for question in shop_list %}<li> {% highlight question.object.shop_name with query %} 價(jià)格: {% highlight question.object.shop_price with query %} <span class='post-author'> <a> {% highlight question.object.shop_dsc with query %} </a></span></li>{% endfor %} </ul> {% else %} <p>No polls are available.</p> {% endif %}</body></html>

load highlight : 加載高亮.query : 檢索詞shop_list : 檢索結(jié)果

視圖層

目錄: find/searchshop/views.py

from django.shortcuts import renderfrom django.http import HttpResponse#Create your views here.from .models import Shoppfrom haystack.forms import ModelSearchFormfrom haystack.query import EmptySearchQuerySetdef index(request): shop_list = Shopp.objects.all() context = { ’query’: ’’, ’shop_list’: shop_list } return render(request, ’searchshop/index.html’, context)def search(request, load_all=True, form_class=ModelSearchForm, searchqueryset=None): if request.GET.get(’q’): form = form_class(request.GET, searchqueryset=searchqueryset, load_all=load_all) if form.is_valid(): query = form.cleaned_data[’q’] results = form.search() context = { ’query’: query, ’shop_list’: results } return render(request, ’searchshop/index.html’, context) # results = form.search() return HttpResponse(request.GET.get(’q’)) return HttpResponse(’查詢’)配置路由

在 find/searchshop 創(chuàng)建 urls.py

from . import viewsapp_name = ’shop’ # 重點(diǎn)是這一行urlpatterns = [ path(’’, views.index, name=’index’), path(’search’, views.search, name=’search’), # path(r’search/$’, views.search, name=’search’)]

修改 urls.py(目錄: find/find/urls.py)

from django.urls import path, includeurlpatterns = [ path(’shop’, include(’searchshop.urls’)), path(’admin/’, admin.site.urls),]

運(yùn)行:

python manage.py runserver

測(cè)試

http://127.0.0.1:8000/shop

基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能

分詞器

所以’紅米’查詢不到…

基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能

到此這篇關(guān)于基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索的文章就介紹到這了,更多相關(guān)python django 分詞器實(shí)現(xiàn)站內(nèi)檢索內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 九九成人| 亚洲国产激情 | 日韩欧美亚州 | 女人扒开腿让男人捅啪啪 | 黄录像欧美片在线观看 | 国产美女作爱全过程免费视频 | 久久久久国产成人精品 | 欧美xxxxbbb| 日本视频播放免费线上观看 | 福利视频在线午夜老司机 | 欧美一区二区视频在线观看 | 性欧美17一18sex性高清播放 | 国产黄色片在线免费观看 | 在线看欧美日韩中文字幕 | 久久中文字幕免费视频 | 亚洲成人综合网站 | 全部免费的毛片视频观看 | 欧美一区二区精品系列在线观看 | 亚洲精品一区二区三区四区 | 日韩精品一区二区三区不卡 | 全部免费的毛片在线看美国 | 国产成人在线视频免费观看 | 久草在线视频中文 | 成人欧美一区二区三区在线观看 | 精品国产一区二区三区不卡 | 国产欧美日韩精品一区二 | 亚洲黄a | 国产精品久久久久久网站 | 国产免费一级在线观看 | 国产l精品国产亚洲区久久 国产tv在线 | 97超级碰碰碰久久久观看 | 国产一级精品视频 | 欧美成人视屏 | 另类专区 亚洲 | 国产在线观看网址你懂得 | 国产精品一区高清在线观看 | 精品99久久| 国产亚洲精品久久麻豆 | 被老外玩爽的中国美女视频 | 亚洲欧美一区二区久久香蕉 | 国产成人在线看 |