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

您的位置:首頁技術文章
文章詳情頁

Python實現(xiàn)中英文全文搜索的示例

瀏覽:41日期:2022-07-03 11:40:13

文章版權所有:州的先生博客

原文地址:https://zmister.com/archives/1596.html

在互聯(lián)網上的各類網站中,無論大小,基本上都會有一個搜索框,用來給用戶對內容進行搜索,小到站點搜索,大到搜索引擎搜索。

從簡單的來說,搜索功能確實很簡單,一個簡單的 select 語句就可以實現(xiàn)數(shù)據(jù)的搜索。

而從復雜的來看,無論是搜索的精度還是搜索的效率,都是有很深的研究范圍的。

對于簡單的搜索功能來說,一個 select 查詢語句也足夠使用,但在稍微復雜一點的搜索環(huán)境下,比如網頁、文檔、新聞資訊等場景,單純的 select 查詢語句則是遠遠不夠。在這些場景下的搜索,全文搜索則是最低配置。

什么是全文搜索?百度百科如是說:

全文數(shù)據(jù)庫是全文檢索系統(tǒng)的主要構成部分。所謂全文數(shù)據(jù)庫是將一個完整的信息源的全部內容轉化為計算機可以識別、處理的信息單元而形成的數(shù)據(jù)集合。全文數(shù)據(jù)庫不僅存儲了信息,而且還有對全文數(shù)據(jù)進行詞、字、段落等更深層次的編輯、加工的功能,而且所有全文數(shù)據(jù)庫無一不是海量信息數(shù)據(jù)庫。

是不是看得不明不白的?講一個簡單的例子大概就理解了。正常情況下,我們搜索“Python 安裝教程”,如果是普通的搜索,會直接使用 select 數(shù)據(jù)庫中包含“Python 安裝教程”的內容。但是全文搜索,會首先將搜索詞拆分成:“Python 安裝教程”、“Python”、“安裝教程”、“安裝”、“教程”等,然后用這些拆分后的詞組進行搜索。

市面上所有的搜索引擎都使用了全文搜索:

Python實現(xiàn)中英文全文搜索的示例

最近“MrDoc 交流群”里讓覓道文檔添加上全文搜索的呼聲很高,遂打算在覓道文檔中把常規(guī)的 select 查詢搜索替換為全文搜索。

最常見的開源全文搜索引擎是 Elasticsearch,功能強大、性能強悍,但是其基于 Java 進行編寫,在 Python 中使用不是很方便,最終州的先生選擇了純 Python 實現(xiàn)的全文搜索引擎——whoosh,并借助 Django 下的開源搜索框架——haystack,依靠 jieba 中文分詞庫,在覓道文檔這一典型 Python Web 應用中實現(xiàn)了中英文的全文搜索。

Python實現(xiàn)中英文全文搜索的示例

安裝依賴庫

如上述所言,本次純 Python 方案實現(xiàn)中英文全文搜索使用到了如下 3 個庫:

whoosh haystack jieba

需要對其進行安裝,使用 pip 命令進行安裝即可:

pip install whooshpip install django-haystackpip install jieba

settings 配置

首先需要在 Django 項目的 settings.py 文件中進行配置。

第一、在 INSTALLED_APPS 中添加 haystack 庫:

Python實現(xiàn)中英文全文搜索的示例

第二、添加配置 haystack 的配置項

Python實現(xiàn)中英文全文搜索的示例

# 當添加、修改、刪除數(shù)據(jù)時,自動生成索引HAYSTACK_SIGNAL_PROCESSOR = ’haystack.signals.RealtimeSignalProcessor’# 自定義高亮HAYSTACK_CUSTOM_HIGHLIGHTER = 'app_doc.search.highlight.MyHighLighter'

創(chuàng)建索引

在 app_doc 目錄下新建一個名為 search_indexes.py 的文件,在其中輸入如下內容:

Python實現(xiàn)中英文全文搜索的示例

在 template 目錄下新建一色名為 search 的目錄,然后在 search 目錄下新建一個名為 indexes 的目錄,接著在其中新建一個名為 app_doc 的目錄(與 Django 應用同名),最后在這個/template/search/app_doc 目錄下新建一個名稱 doc_text.txt 的文件(模型名稱_text.txt),在其中輸入需要索引的模型字段:

{{object.name}}{{object.pre_content}}

創(chuàng)建中文分詞器

由于 whoosh 對中文的分詞能力不行,如果我們搜索中文,其八成不會對其進行分詞,所以我們額外引入了 jieba 模塊來進行中文分詞。

在 /MrDoc/app_doc/search 目錄下新建一個名為 chines_analyzer.py 的文件,在其中寫入如下代碼:

Python實現(xiàn)中英文全文搜索的示例

自定義 whoosh 搜索引擎

在 /MrDoc/app_doc/search 目錄下新建一個名為 whoosh_cn_backend.py 的文件(這個路徑文件即是我們在 settings.py 文件中指定的引擎路徑),復制 python 安裝路徑Libsite-packageshaystackbackendswhoosh_backend.py 的內容到這個文件中,并做如下修改:

from whoosh.analysis import StemmingAnalyzer

替換為:

from app_doc.search.chinese_analyzer import ChineseAnalyzer as StemmingAnalyzer

這樣,我們自定義能夠進行中文分詞的 whoosh 引擎就完成了。

編寫視圖函數(shù)

完成上述步驟之后,全文搜索引擎幕后的工作就已經完成了,我們接下來需要按照 Django 的方式,編寫邏輯視圖,并進行 HTML 模板的渲染。

在這里,州的先生在/MrDoc/app_doc/下新建了一個名為 views_search.py 的文件來放置全文搜索的視圖函數(shù),繼承 haystack.views.SearchView 類,自定義了一個全文搜索視圖類:

Python實現(xiàn)中英文全文搜索的示例

HTML 模板渲染

全文搜索引擎的數(shù)據(jù)默認返回在了特定的 HTML 模板中,州的先生沒有對此進行自定義,所以按照 haystack 的要求,在 template/search 目錄下新建了一個名為 search.html 的模板文件,對全文搜索視圖類返回的搜索數(shù)據(jù)集進行渲染解析。

Python實現(xiàn)中英文全文搜索的示例

生成索引

最后我們需要在命令行終端生成一下索引文件,使用如下命令:

python manage.py rebuild_index

這樣,就實現(xiàn)了純 Python 方案的中英文全文搜索,效果如下動圖所示:

Python實現(xiàn)中英文全文搜索的示例

文中所涉代碼均為 MrDoc 覓道文檔源碼,包括:

/MrDoc/MrDoc/settings.py /MrDoc/app_doc/search/chinese_analyzer.py /MrDoc/app_doc/search/highlight.py /MrDoc/app_doc/search/whoosh_cn_backend.py /MrDoc/app_doc/search_indexes.py /MrDoc/app_doc/views_search.py /MrDoc/template/search/*

源碼地址為:

https://gitee.com/zmister/MrDochttps://github.com/zmister2016/MrDoc

以上就是Python實現(xiàn)中英文全文搜索的示例的詳細內容,更多關于python 實現(xiàn)全文搜索的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | 首页 - 张店继勇软件开发工作室 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 宜兴紫砂壶知识分享 - 宜兴壶人| 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 商标转让-商标注册-商标查询-软著专利服务平台 - 赣江万网 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | pbt头梳丝_牙刷丝_尼龙毛刷丝_PP塑料纤维合成毛丝定制厂_广州明旺 | 恒温水槽与水浴锅-上海熙浩实业有限公司 | 减速机_上海宜嘉减速机| 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 江苏皓越真空设备有限公司 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | 建筑资质代办-建筑资质转让找上海国信启航 | 公交驾校-北京公交驾校欢迎您!| 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 泰国试管婴儿_泰国第三代试管婴儿费用|成功率|医院—新生代海外医疗 |