日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Python實現中英文全文搜索的示例

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

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

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

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

從簡單的來說,搜索功能確實很簡單,一個簡單的 select 語句就可以實現數據的搜索。

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

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

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

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

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

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

Python實現中英文全文搜索的示例

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

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

Python實現中英文全文搜索的示例

安裝依賴庫

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

whoosh haystack jieba

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

pip install whooshpip install django-haystackpip install jieba

settings 配置

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

第一、在 INSTALLED_APPS 中添加 haystack 庫:

Python實現中英文全文搜索的示例

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

Python實現中英文全文搜索的示例

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

創建索引

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

Python實現中英文全文搜索的示例

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

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

創建中文分詞器

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

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

Python實現中英文全文搜索的示例

自定義 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 引擎就完成了。

編寫視圖函數

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

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

Python實現中英文全文搜索的示例

HTML 模板渲染

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

Python實現中英文全文搜索的示例

生成索引

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

python manage.py rebuild_index

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

Python實現中英文全文搜索的示例

文中所涉代碼均為 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實現中英文全文搜索的示例的詳細內容,更多關于python 實現全文搜索的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久免费国产| 亚洲综合婷婷| 91精品国产自产在线丝袜啪| 视频一区二区欧美| 久久xxxx精品视频| 视频一区视频二区中文字幕| 久久国产高清| 蜜臀精品久久久久久蜜臀| 免费观看在线色综合| 蜜桃免费网站一区二区三区| 亚洲精品观看| 国产欧美69| 久久久久九九精品影院| 国产精品玖玖玖在线资源| 麻豆视频一区| 精品三级av| 久久夜夜操妹子| 91精品1区| 一本色道久久精品| 免费美女久久99| 91av一区| 国产福利亚洲| 日韩欧美一区二区三区免费看| 91亚洲国产| 国产精品av久久久久久麻豆网| 日韩专区欧美专区| 日本精品国产| 国产第一亚洲| 久久久久蜜桃| 蜜桃91丨九色丨蝌蚪91桃色| 青青国产91久久久久久| 精品免费在线| 影音国产精品| 91亚洲无吗| 国产欧美一区二区三区精品酒店| 性欧美xxxx免费岛国不卡电影| 男人操女人的视频在线观看欧美| 69堂免费精品视频在线播放| 国产一区二区三区成人欧美日韩在线观看| 一本大道色婷婷在线| 国产精品三上| 你懂的网址国产 欧美| 久久理论电影| 蜜桃视频免费观看一区| 国模大尺度视频一区二区| 亚洲视频播放| 欧美激情日韩| 婷婷久久一区| 国产美女精品视频免费播放软件| 伊人久久高清| 日本综合精品一区| 日韩一区三区| 91国内精品| 婷婷丁香综合| 韩日一区二区| 在线精品一区| 欧美羞羞视频| 97久久精品| 丝袜av一区| 国产精品午夜一区二区三区| 欧美在线亚洲综合一区| 麻豆久久久久久| 亚洲欧美不卡| 亚洲最新无码中文字幕久久 | 1024精品久久久久久久久| 国产精品中文| 精品一区毛片| 国产欧美一区二区三区精品观看 | 欧美日韩一区二区综合| 91欧美极品| 国产高清一区| www.九色在线| 国产精一区二区| 免费不卡中文字幕在线| 国产福利一区二区精品秒拍| 美女精品在线| 日本欧美不卡| 欧美精品二区| 亚洲+小说+欧美+激情+另类| 久久九九99| 久久av偷拍| 亚洲三级国产| 婷婷国产精品| 精品99在线| 777久久精品| 蜜桃久久久久久| 91久久中文| 另类中文字幕国产精品| 久久av中文| 欧美日韩91| 喷白浆一区二区| 在线亚洲激情| 日韩视频中文| 亚洲特色特黄| 久久99青青| 日本强好片久久久久久aaa| 亚洲欧美日韩国产一区| av在线最新| 国产一区一一区高清不卡| 国产另类在线| 国产伦精品一区二区三区千人斩 | 综合日韩在线| 午夜久久美女| 99久精品视频在线观看视频| 国产999精品在线观看 | 国产精品麻豆成人av电影艾秋| 一区二区电影在线观看| 亚洲经典在线| 玖玖玖国产精品| 狠狠久久婷婷| 亚洲精品黄色| 国产91精品对白在线播放| 色综合五月天| 国产在线观看91一区二区三区| 国产伦理久久久久久妇女| 欧美亚洲tv| 久久国产麻豆精品| 热久久久久久| 久久国内精品自在自线400部| 亚洲香蕉视频| 日韩精品1区2区3区| 午夜天堂精品久久久久| 亚洲精品少妇| 久久精品99国产国产精| 欧美亚洲福利| 日本va欧美va精品发布| 日本午夜精品一区二区三区电影| 日韩高清不卡在线| 91嫩草精品| 麻豆一区二区在线| 中文字幕在线免费观看视频| 日韩欧美少妇| 欧美日韩国产一区精品一区| 最新亚洲激情| 综合亚洲视频| 国产精品久久久久久久久久齐齐| 国产伦理一区| 久久麻豆视频| 久久精品理论片| 亚洲黄色免费av| 国产一区亚洲| 日韩中文字幕一区二区三区| 日韩一二三区在线观看| 国产伦理一区| 亚洲伦乱视频| 一本色道久久精品| 欧美视频二区| 动漫av一区| 欧美福利在线| 丝袜亚洲另类欧美| 国产亚洲精aa在线看| 丰满少妇一区| 午夜国产精品视频| 欧美片第1页综合| 国产91在线播放精品| 蜜臀av免费一区二区三区| 香蕉久久一区| 九九99久久精品在免费线bt| 在线一区视频观看| 玖玖玖国产精品| 欧美国产免费| 国产99精品一区| 日韩美女精品| 精品国产精品久久一区免费式| 久久精品青草| 亚洲精品麻豆| 中文av在线全新| 91久久中文| 久久不卡国产精品一区二区| 欧美不卡高清| 国产精品久久久久久av公交车| 欧美aa一级| 少妇精品久久久一区二区| 超级白嫩亚洲国产第一| 男人天堂欧美日韩| 麻豆国产一区| 精品91久久久久| 国产日韩一区二区三区在线| 日韩不卡在线| 久久国产尿小便嘘嘘| 久久国产亚洲精品| 国产日韩在线观看视频| 麻豆精品蜜桃| 日韩精品一页| 日本精品黄色| 91亚洲一区| 亚洲三级视频| 福利精品在线| 亚洲久草在线| 成人自拍av| 国产日韩欧美一区| 久久国产直播| 欧美日韩伊人| 午夜国产精品视频免费体验区| 国产精品视频一区二区三区| 亚洲大全视频| 国内精品伊人| 免费在线观看成人| 蜜桃精品在线| 久久超级碰碰|