使用python+whoosh實(shí)現(xiàn)全文檢索
whoosh的官方介紹:http://whoosh.readthedocs.io/en/latest/quickstart.html
因?yàn)樽龅氖侵形牡娜臋z索需要導(dǎo)入jieba工具包以及whoosh工具包
直接上代碼吧
from whoosh.qparser import QueryParser
from whoosh.index import create_in
from whoosh.index import open_dir
from whoosh.fields import *
from jieba.analyse import ChineseAnalyzer
from get_comment import SQL
from whoosh.sorting import FieldFacet
analyser = ChineseAnalyzer() #導(dǎo)入中文分詞工具
schema = Schema(phone_name=TEXT(stored=True, analyzer=analyser), price=NUMERIC(stored=True),
phoneid=ID(stored=True))# 創(chuàng)建索引結(jié)構(gòu)
ix = create_in("path", schema=schema, indexname='indexname') #path 為索引創(chuàng)建的地址,indexname為索引名稱
writer = ix.writer()
writer.add_document(phone_name='name',price ="price",phoneid ="id") # 此處為添加的內(nèi)容
print("建立完成一個(gè)索引")
writer.commit()
# 以上為建立索引的過(guò)程
new_list = []
index = open_dir("indexpath", indexname='comment') #讀取建立好的索引
with index.searcher() as searcher:
parser = QueryParser("要搜索的項(xiàng)目,比如“phone_name", index.schema)
myquery = parser.parse("搜索的關(guān)鍵字")
facet = FieldFacet("price", reverse=True) #按序排列搜索結(jié)果
results = searcher.search(myquery, limit=None, sortedby=facet) #limit為搜索結(jié)果的限制,默認(rèn)為10,詳見博客開頭的官方文檔
for result1 in results:
print(dict(result1))
new_list.append(dict(result1))
注:
Whoosh 有一些很有用的預(yù)定義 field types,你也可以很easy的創(chuàng)建你自己的。
whoosh.fields.ID
這個(gè)類型簡(jiǎn)單地將field的值索引為一個(gè)獨(dú)立單元(這意味著,他不被分成單獨(dú)的單詞)。這對(duì)于文件路徑、URL、時(shí)間、類別等f(wàn)ield很有益處。
whoosh.fields.STORED
這個(gè)類型和文檔存儲(chǔ)在一起,但沒(méi)有被索引。這個(gè)field type不可搜索。這對(duì)于你想在搜索結(jié)果中展示給用戶的文檔信息很有用。
whoosh.fields.KEYWORD
這個(gè)類型針對(duì)于空格或逗號(hào)間隔的關(guān)鍵詞設(shè)計(jì)。可索引可搜索(部分存儲(chǔ))。為減少空間,不支持短語(yǔ)搜索。
whoosh.fields.TEXT
這個(gè)類型針對(duì)文檔主體。存儲(chǔ)文本及term的位置以允許短語(yǔ)搜索。
whoosh.fields.NUMERIC
這個(gè)類型專為數(shù)字設(shè)計(jì),你可以存儲(chǔ)整數(shù)或浮點(diǎn)數(shù)。
whoosh.fields.BOOLEAN
這個(gè)類型存儲(chǔ)bool型
whoosh.fields.DATETIME
這個(gè)類型為 datetime object而設(shè)計(jì)(更多詳細(xì)信息)
whoosh.fields.NGRAM 和 whoosh.fields.NGRAMWORDS
這些類型將fiel文本和單獨(dú)的term分成N-grams(更多Indexing & Searching N-grams的信息)
以上這篇使用python+whoosh實(shí)現(xiàn)全文檢索就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中asyncore異步模塊的用法及實(shí)現(xiàn)httpclient的實(shí)例
asyncore即是一個(gè)異步的socket封裝,特別是dispatcher類中包含了很多異步調(diào)用的socket操作方法,非常犀利,下面我們就來(lái)講解Python中asyncore異步模塊的用法及實(shí)現(xiàn)httpclient的實(shí)例2016-06-06
python中os.stat().st_size、os.path.getsize()獲取文件大小
本文介紹了使用os.stat()和os.path.getsize()函數(shù)獲取文件大小,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Python中DataFrame轉(zhuǎn)列表的最全指南
在Python數(shù)據(jù)分析中,Pandas的DataFrame是最常用的數(shù)據(jù)結(jié)構(gòu)之一,本文將為你詳解5種主流DataFrame轉(zhuǎn)換為列表的方法,大家可以根據(jù)需求進(jìn)行選擇2025-03-03
python中str內(nèi)置函數(shù)用法總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于python中str內(nèi)置函數(shù)用法總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-12-12
python Canny邊緣檢測(cè)算法的實(shí)現(xiàn)
這篇文章主要介紹了python Canny邊緣檢測(cè)算法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python3從網(wǎng)絡(luò)攝像機(jī)解析mjpeg http流的示例
這篇文章主要介紹了python3從網(wǎng)絡(luò)攝像機(jī)解析mjpeg http流的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11
Python?OpenCV超詳細(xì)講解透視變換的實(shí)現(xiàn)
OpenCV用C++語(yǔ)言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實(shí)時(shí)視覺(jué)應(yīng)用,并在可用時(shí)利用MMX和SSE指令,本篇文章帶你通過(guò)OpenCV實(shí)現(xiàn)透視變換2022-04-04
python列表使用實(shí)現(xiàn)名字管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python列表使用實(shí)現(xiàn)名字管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01

