电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

源碼

前期準(zhǔn)備

安裝庫:

pip install django-haystackpip install whooshpip install jieba

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

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

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項目

創(chuàng)建項目demo:

# django-admin startproject <項目名>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文件注冊模型:

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

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

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

python manage.py makemigrations python manage.py migrate創(chuàng)建后臺管理帳號

訪問后臺可操作模型數(shù)據(jù):

python manage.py createsuperuser

運(yùn)行:

python manage.py runserver

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

基于python + django + whoosh + jieba 分詞器實現(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(其實可以隨便寫)class ArticlePostIndex(indexes.SearchIndex, indexes.Indexable): # text為索引字段 # document = True,這代表haystack和搜索引擎將使用此字段的內(nèi)容作為索引進(jìn)行檢索 # use_template=True 指定根據(jù)表中的那些字段建立索引文件的說明放在一個文件中 text = indexes.CharField(document=True, use_template=True) # 對那張表進(jìn)行查詢 def get_model(self): # 重載get_model方法,必須要有!# 返回這個modelreturn Shopp # 建立索引的數(shù)據(jù) def index_queryset(self, using=None):# 這個方法返回什么內(nèi)容,最終就會對那些方法建立索引,這里是對所有字段建立索引return self.get_model().objects.all()

生成檢索索引

python manage.py rebuild_index

項目目錄多出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’), }} # 添加此項,當(dāng)數(shù)據(jù)庫改變時,會自動更新索引,非常方便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}}

添加頁面模板

在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 %} 價格: {% 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’ # 重點是這一行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

測試

http://127.0.0.1:8000/shop

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

分詞器

所以’紅米’查詢不到…

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 电动葫芦-河北悍象起重机械有限公司| 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-北京罗伦过滤技术集团有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 环比机械 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 宝鸡市人民医院| 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 承插管件_不锈钢承插管件_锻钢高压管件-温州科正阀门管件有限公司 | 学习安徽网| 中细软知识产权_专业知识产权解决方案提供商 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 湖南自考_湖南自学考试| 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 | 凝胶成像仪,化学发光凝胶成像系统,凝胶成像分析系统-上海培清科技有限公司 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 焊锡,锡膏,锡线,锡条,焊锡膏-绿志岛金属有限公司 | 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 |