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

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

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

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

文章版權(quán)所有:州的先生博客

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

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

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

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

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

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

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

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

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

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

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

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

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

創(chuàng)建索引

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

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

在 template 目錄下新建一色名為 search 的目錄,然后在 search 目錄下新建一個名為 indexes 的目錄,接著在其中新建一個名為 app_doc 的目錄(與 Django 應(yīng)用同名),最后在這個/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 文件中指定的引擎路徑),復(fù)制 python 安裝路徑Libsite-packageshaystackbackendswhoosh_backend.py 的內(nèi)容到這個文件中,并做如下修改:

from whoosh.analysis import StemmingAnalyzer

替換為:

from app_doc.search.chinese_analyzer import ChineseAnalyzer as StemmingAnalyzer

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

編寫視圖函數(shù)

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

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

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

HTML 模板渲染

全文搜索引擎的數(shù)據(jù)默認(rèn)返回在了特定的 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)中英文全文搜索的示例的詳細(xì)內(nèi)容,更多關(guān)于python 實現(xiàn)全文搜索的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲三级国产| 喷白浆一区二区| 中文亚洲欧美| 久久久久久色 | 亚洲深夜福利在线观看| 日韩一区二区在线免费| 国产精品午夜av| 蜜桃91丨九色丨蝌蚪91桃色| 日本不卡免费高清视频在线| 国产精品久久久久久模特| 日韩在线观看一区二区| 亚洲天堂久久| 日韩精品诱惑一区?区三区| 免费一级欧美在线观看视频| 亚洲精品九九| 亚洲免费影视| 91精品高清| 首页国产精品| 久久亚洲人体| 狂野欧美性猛交xxxx| 国产精品theporn| 欧美亚洲二区| 亚洲ww精品| 亚洲婷婷丁香| 蜜臀久久99精品久久久久久9| 国内一区二区三区| 国产激情一区| 精品中文字幕一区二区三区四区| 国产伦理久久久久久妇女| 日韩精品一区二区三区中文 | 中文字幕亚洲影视| 99pao成人国产永久免费视频| 亚洲播播91| 一区二区精品伦理...| 老司机免费视频一区二区三区| 国产精品久久久免费| 国产情侣久久| 国产欧美日韩一区二区三区在线| 欧美私人啪啪vps| 久久精品xxxxx| 麻豆一区二区三区| 国产一区丝袜| 日本久久成人网| 久久高清免费| 日韩理论视频| 久久久久国产精品一区二区| 日韩网站中文字幕| 免费精品国产| 西西人体一区二区| 日韩亚洲精品在线观看| 欧美一区91| 麻豆久久久久久| 在线看片福利| 激情久久久久久| 婷婷久久一区| 久久久精品午夜少妇| 99久久久久| 亚洲综合丁香| 日韩高清在线一区| 欧美视频一区| 国产毛片久久久| 久久99影视| 国产精品毛片久久久| 成人免费一区| 欧美日韩午夜电影网| 亚洲一级大片| 亚洲男女自偷自拍| 日韩1区2区日韩1区2区| 美女视频网站久久| 91精品xxx在线观看| 国产一区导航| 日本中文字幕不卡| 久久精品九色| 久久一区二区三区喷水| 午夜欧美精品久久久久久久| 99成人在线| 欧美影院视频| 国产aⅴ精品一区二区四区| 欧美一级精品| 日韩精品一区二区三区中文 | 亚洲福利久久| 日本一区二区三区视频在线看 | 久久av在线| 精品黄色一级片| 午夜国产欧美理论在线播放| 欧美三级第一页| 吉吉日韩欧美| 日本中文字幕视频一区| 97精品国产| 亚洲欧美成人综合| 国产欧美啪啪| 激情婷婷久久| 国产精品久久久久久久久久久久久久久| av资源亚洲| 日韩高清不卡一区二区| 色黄视频在线观看| 国产一在线精品一区在线观看| 中文在线日韩| 久久精品在线| 国产精品国产三级在线观看| 久久av在线| 综合一区二区三区| 黄色av日韩| 国产a亚洲精品| 视频一区视频二区在线观看| 欧美精品中文字幕亚洲专区| 久久影院一区二区三区| 国产探花在线精品| 亚洲天堂黄色| 久久精品一区二区三区中文字幕| 亚洲精品一二三区区别| 国产精品一卡| 亚洲激情久久| 免费污视频在线一区| 欧美特黄一区| 五月激情久久| а√天堂8资源中文在线| 欧美国产91| 一本一本久久| 视频一区国产视频| 亚洲欧洲美洲国产香蕉| 日韩不卡一区| 亚洲天堂久久| 欧美一区二区三区高清视频| 国产在线|日韩| 国产乱码午夜在线视频| 欧美日韩黄网站| 国产视频一区免费看| 日韩二区在线观看| 中国女人久久久| 久久不卡日韩美女| 国产欧美日韩| 国产亚洲毛片| 黑丝一区二区三区| 亚洲毛片在线| 美女视频黄久久| 免费久久精品| 精品1区2区3区4区| 蜜臀久久99精品久久一区二区| 久久激情综合网| 日韩国产在线观看| 欧美视频久久| 免费在线成人网| 麻豆精品少妇| 欧美黄色一区二区| 五月激情久久| 亚洲精品少妇| 国产综合色产| 日韩免费在线| 国产精品福利在线观看播放| 欧美aaaaaa午夜精品| 午夜电影一区| 亚洲三区欧美一区国产二区| 三级一区在线视频先锋| av亚洲在线观看| 欧美中文日韩| 日韩精品一区二区三区中文字幕| 91av一区| 国产在线视频欧美一区| 日本欧美不卡| 国产精品日韩久久久| 97se亚洲| 久久不卡日韩美女| 久久久噜噜噜| 最新国产精品视频| 麻豆一区二区三| 欧美色图国产精品| 男女性色大片免费观看一区二区 | 麻豆精品在线| 神马日本精品| 天堂av在线一区| 日本aⅴ免费视频一区二区三区| 国产黄色一区| 激情五月色综合国产精品| 日韩激情视频网站| av免费不卡国产观看| 免费日韩视频| 精品亚洲成人| 每日更新成人在线视频| 国产精品欧美在线观看| 99精品视频在线观看免费播放| 视频一区日韩精品| 日韩一区二区三区免费| 午夜精品影视国产一区在线麻豆| 久久久久久色| 免费福利视频一区二区三区| 亚洲一区二区免费看| 国产精品1区| 日韩视频二区| 国产经典一区| 亚洲主播在线| 成人国产精品久久| 自拍自偷一区二区三区| 国产成人免费视频网站视频社区| 一本色道久久精品| 国产一区二区三区国产精品| 国产精品日韩久久久| 久久午夜影院| 美国三级日本三级久久99| av在线最新|