whoosh是python中解決索引查詢的模組,在討論索引查詢的文章已經對有關索引查詢進行了闡述,此處詳細說明whoosh模組的應用。
這裡有詳細內容(鏈結被被閹割!)
whoosh在應用上劃分三個步驟:
建立索引和模式物件
寫入索引檔案搜尋
下面依次闡述各步驟
使用whoosh的第一步就是要建立索引物件。首先要定義索引模式,以字段的形式列在索引中。例如:
>>> from whoosh.fields import *
>>> schema = schema(title=text, path=id, content=text)
title/path/content就是所謂的字段。每個字段對應索引查詢目標檔案的一部分資訊,上面的例子中就是建立索引的模式:索引內容包括title/path/content。乙個字段建立了索引,意味著它能夠被搜尋;也能夠被儲存,意味著返回結果。例如上面的例子,可以寫成:
>>> schema = schema(title=text(stored=true), path=id(stored=true), content=text)
這裡在某些字段後面新增了(stored=true),意味著將返回該字段的搜尋結果。
以上就建立好了索引模式,不需要重複建立索引模式,因為一旦此模式建立,將隨索引儲存。
在生產過程中,如果你願意,還可以建立乙個類用於建立索引模式。如下例子:
from whoosh.fields import schemaclass, text, keyword, id, stored
class myschema(schemaclass):
path = id(stored=true)
title = text(stored=true)
content = text
tags = keyword
在上例中,title=text,title是欄位名稱,後面的text是該字段的型別。這兩個分別說明了索引內容和查詢物件型別。whoosh有如下字段型別,供建立所以模式使用。
索引模式建立之後,還要建立索引儲存目錄。如下:
import os.path
from whoosh.index import create_in
from whoosh.index import open_dir
if not os.path.exists('index'): #如果目錄index不存在則建立
os.mkdir('index')
ix = create_in("index",schema) #按照schema模式建立索引目錄
ix = open_dir("index") #開啟該目錄一遍儲存索引檔案
上例中,用create_in建立乙個具有前述索引模式的索引儲存目錄物件,所有的索引將被儲存在該目錄(index)中。
之後,用open_dir開啟這個目錄。
第一步到此結束。
import os.path
from whoosh import fields
from whoosh import index
schema = fields.schema(title=text(stored=true), path=id(stored=true), content=text)
if not os.path.exists("index"):
os.mkdir("index")
ix = index.create_in("index",schema)
ix = index.open_dir("index")
(待續)
本文屬於閹割之後的版本。要看完整版,請到我的github:qiwsir的itarticles裡面的basicpython。
sql server 全文搜尋(全文索引)
參考 按照鏈結方式建立全文索引 使用 全文查詢使用全文謂詞 contains 和 freetext 以及全文函式 containstable 和 freetexttable 它們支援複雜的 transact sql 語法,這種語法支援各種形式的查詢詞。若要編寫全文查詢,必須了解何時以及如何使用這些謂...
mysql全文索引中文搜尋
由於mysql的預設配置是索引的詞的長度是4,所以需要修改mysql的配置檔案my.cnf 在 mysqld 位置內加入 ft min word len 2 其它屬性還有 ft wordlist charset gbk ft wordlist file home mysql wordlist gbk...
mysql全文索引的坑 MySQL全文索引問題
我有乙個包含以下資料的 文章 mysql select from articles id title body 1 mysql tutorial dbms stands for database 2 how to use mysql well after you went through a 3 o...