当前位置: 首页 > 后端技术 > Python

Whoosh搜索引擎安装与配置

时间:2023-03-26 14:34:25 Python

Whoosh介绍Whoosh是一个类库和函数库,用于对文本进行索引,然后搜索索引。它允许您为您的内容开发自定义搜索引擎。例如,如果您正在创建博客软件,您可以使用Whoosh添加搜索功能以允许用户搜索博客条目。Whoosh是一个用python实现的全文搜索引擎。它的设计参考了Lucene。配置和使用比较方便,但性能不是很理想。但是,它仍然可以用于小型网站或测试场景。本文介绍whoosh最基本的安装和使用方法。欲了解更多信息,请访问官方网站。官方文档:https://whoosh.readthedocs.io...whoosh安装可以直接用pip安装:pipinstallwhoosh也可以从源码安装:具体见项目主页:https://pypi.python.org/pypi/...QuickStart看看官方的QuickStart例子:>>fromwhoosh.indeximportcreate_in>>>fromwhoosh.fieldsimport*>>>schema=Schema(title=TEXT(stored=True),path=ID(stored=True),content=TEXT)>>>ix=create_in("indexdir",schema)>>>writer=ix.writer()>>>writer.add_document(标题=u"第一个文件",path=u"/a",...content=u"这是第一个文件我们添加了st文档!”)>>>writer.add_document(title=u"第二个文档",path=u"/b",...content=u"第二个更有趣!")>>>writer.commit()>>>fromwhoosh.qparserimportQueryParser>>>withix.searcher()assearcher:...query=QueryParser("content",ix.schema).parse("first")...results=searcher.search(query)...results[0]...{"title":u"Firstdocument","path":u"/a"}索引和模式对象首先定义索引模式,定义索引schema,以字段的形式列在索引中:fromwhoosh.fieldsimport*schema=Schema(title=TEXT,path=ID,content=TEXT)其中title、path和content是字段,每个field对应索引查找目标文件的一部分信息,上面的代码是定义索引的模式——索引内容包括三个字段:title、path、content,一个字段可以被查找和存储建立索引后,下面的代码等价于上面的代码:schema=Schema(title=TEXT(stored=True),path=ID(stored=True),content=TEXT)在字段(stored=True)之后添加参数,表示将返回该字段的搜索结果。这样就建立了索引模式,而且只需要建立一次,不需要重复创建。建立索引模式后,将与索引一起保存。定义索引模式对象索引模式对象是继承自SchemaClass的类,例如:fromwhoosh.fieldsimportSchemaClass,TEXT,KEYWORD,ID,STOREDclassTestSchema(SchemaClass):path=ID(stored=True)title=TEXT(stored=True)content=TEXTtags=KEYWORD索引字段类型上例中title=TEXT(stored=True),title为字段名,TEXT为字段类型。whoosh有以下几种字段类型,在创建索引模式时可以使用:whoosh.fields.ID:只能是一个单位值,即不能分成几个词,通常用于文件等东西路径、URL、日期和类别。whoosh.fields.STORED:该字段随文件一起保存,但不能被索引或查询。常用于显示文件信息。whoosh.fields.KEYWORD:以空格或逗号(半角)分隔的关键字,可被索引和搜索。为了节省空间,不支持单词搜索。whoosh.fields.TEXT:文件的文本内容。索引和存储文本,并支持词汇搜索。whoosh.fields.NUMERIC:数字类型,保存整数或浮点数。whoosh.fields.BOOLEAN:booleanclassvaluewhoosh.fields.DATETIME:时间对象类型官方文档https://pythonhosted.org/Whoo...选择索引存放目录创建索引模式后,选择一个文件夹保存搜索引擎创建的索引数据。代码如下:importos.pathfromwhoosh.indeximportcreate_infromwhoosh.indeximportopen_dirschema=fields.Schema(title=TEXT(stored=True),path=ID(stored=True),content=TEXT)ifnotos。小路。exists('index_data'):#如果目录index_data不存在,则创建os.mkdir('index_data')ix=create_in("index_data",schema)#根据之前创建的schema创建索引目录modeix=open_dir("index_data") #打开目录,再次存储索引文件上例中,使用create_in创建一个索引存储目录对象,采用上述索引方式,所有索引都会保存在index_data目录下。之后,用open_dir打开这个目录。保存索引数据的代码如下:writer=ix.writer()writer.add_document(title=u"我的文档",content=u"这是我的文档",path=u"/a",tags=u"第一个短片")writer.add_document(title=u"我的第二个文件",content=u"这是我的第二个文件",path=u"/b",tags=u"第二个短片")writer.commit()注意field的值必须是unicode。并非每个字段都必须分配一个值。官方文档https://pythonhosted.org/Whoo...开始搜索,创建搜索对象searcher=ix.searcher()搜索完记得关闭searcher.close()推荐使用下面这种写法ix.searcher()作为搜索器:(做某事)或尝试:searcher=ix.searcher()(做某事)最后:searcher.close()开始搜索以搜索内容作为示例fromwhoosh.qparserimportQueryParserwithix.searcher()作为搜索器:query=QueryParser("content",ix.schema).parse("second")result=searcher.search(query)results[0]returnresult:{"title":u"myseconddocument","path":u"/a"}写在后面这里基本没问题,但是嗖,还是全文搜索引擎的使用和原理远不止这些,我再贴吧在下面的博客中介绍了从零开始写一个搜索引擎的方法。有兴趣的同学可以继续关注,一起学习~本文的结构和部分内容参考了老七老师的博客。在此谢谢啦~欢迎和我交流,玩码直播间:https://live.bilibili.com/11883038微信公众号:DealiAx和知乎:https://www.zhihu.com/people/dealiaxy博客:https://blog.deali.cn简书:https://www.jianshu.com/u/965b95853b9f