使用Python和Whoosh实现全文检索的攻略分为以下几个步骤:
1. 安装Whoosh
Whoosh是Python的一个纯Python实现全文搜索引擎库,首先需要安装Whoosh库。可以在命令行中使用pip命令进行安装:
pip install whoosh
2. 确定索引目录和模式
首先需要创建用于存储索引的目录,可以选择自己喜欢的目录路径,这里假设索引目录为 ./indexdir
:
from whoosh.index import create_in
from whoosh.fields import *
import os
if not os.path.exists("./indexdir"):
os.mkdir("./indexdir")
schema = Schema(title=TEXT(stored=True), content=TEXT(stored=True))
ix = create_in("./indexdir", schema)
这段代码创建了一个包含title
和content
两个域的索引schema,并在./indexdir
中创建了一个新的索引。
注意,在这里我们需要使用stored参数,这将存储字段数据用于每个搜索结果的返回。如果不使用stored,将会返回每个匹配文档的文档ID。
3. 向索引中添加文档
添加文档时,我们需要为每个文档创建一个文档对象doc
,并使用它来向索引中添加文档:
from whoosh.index import create_in
from whoosh.fields import *
import os
if not os.path.exists("./indexdir"):
os.mkdir("./indexdir")
schema = Schema(title=TEXT(stored=True), content=TEXT(stored=True))
ix = create_in("./indexdir", schema)
writer = ix.writer()
writer.add_document(title=u"Python 教程", content=u"Python 是一种计算机程序设计语言。")
writer.add_document(title=u"whoosh 全文搜索引擎", content=u"Whoosh 是 Python 的一个纯 Python 实现全文搜索引擎库。")
writer.add_document(title=u"编程入门", content=u"编程入门是学习编程的第一步。")
writer.commit()
writer.add_document()
方法将文档添加到索引,并使用writer.commit()
方法将修改提交到目录。注意,必须在更新索引之后调用writer.commit()
方法。
4. 进行全文检索
现在我们已经建立了索引并向其中添加了文档,可以使用Whoosh进行全文检索。以下是一个例子:
from whoosh.index import open_dir
from whoosh.qparser import QueryParser
ix = open_dir("./indexdir")
searcher = ix.searcher()
query = QueryParser("content", ix.schema).parse("python")
results = searcher.search(query)
for i, hit in enumerate(results):
print("结果%d: %s" % (i, hit["title"]))
该例子中,我们首先打开索引目录并创建一个搜索器,然后创建一个查询对象来搜索“python”。查询返回结果后,我们遍历结果并输出每个匹配行的标题。
可得到以下结果:
结果0: Python 教程
结果1: whoosh 全文搜索引擎
5. 完整代码示例
from whoosh.index import create_in, open_dir
from whoosh.fields import *
from whoosh.qparser import QueryParser
import os
# 创建索引
def index():
if not os.path.exists("./indexdir"):
os.mkdir("./indexdir")
schema = Schema(title=TEXT(stored=True), content=TEXT(stored=True))
ix = create_in("./indexdir", schema)
writer = ix.writer()
writer.add_document(title=u"Python 教程", content=u"Python 是一种计算机程序设计语言。")
writer.add_document(title=u"whoosh 全文搜索引擎", content=u"Whoosh 是 Python 的一个纯 Python 实现全文搜索引擎库。")
writer.add_document(title=u"编程入门", content=u"编程入门是学习编程的第一步。")
writer.commit()
# 进行全文检索
def search(query):
ix = open_dir("./indexdir")
searcher = ix.searcher()
query = QueryParser("content", ix.schema).parse(query)
results = searcher.search(query)
for i, hit in enumerate(results):
print("结果%d: %s" % (i, hit["title"]))
# 运行示例
if __name__ == "__main__":
index()
search("python")
这里我们首先定义了两个函数index()
和search()
,前者用来创建索引,后者用来进行全文检索的操作。然后我们调用index()
函数创建并更新索引,最后使用search()
函数进行全文检索。
感谢您的提问与耐心阅读,希望这份攻略能够对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用python+whoosh实现全文检索 - Python技术站