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

Python使用Whoosh搭建轻量级搜索

时间:2023-03-25 19:41:30 Python

本文将简单介绍一下Python中的轻量级搜索工具Whoosh,并给出相应的使用示例代码。WhooshWhoosh简介由MattChaput创建。它最初是一个简单快速的Houdini3D动画包在线文档的搜索服务工具,后来逐渐成为一个成熟的搜索解决方案工具并已经开源。Whoosh完全是用Python编写的。它是一个灵活、方便、轻量级的搜索引擎工具。现在支持Python2和3。它的优点如下:Whoosh是纯Python写的,但是很快,只需要Python了。环境足够,不需要编译器;默认使用OkapiBM25F排序算法,也支持其他排序算法;与其他搜索引擎相比,Whoosh会创建更小的索引文件;Whoosh中的索引文件编码必须是unicode;Whoosh可以存储任意Python对象。Whoosh的官方介绍网站是:https://whoosh.readthedocs.io...。与ElasticSearch或Solr等成熟的搜索引擎工具相比,Whoosh更轻巧,更易于操作,可以考虑在小型搜索项目中使用。Index&query对于熟悉ES的人来说,搜索的两个重要方面是映射和查询,即索引构建和查询,其背后是复杂的索引存储、查询解析和排序算法。如果你有使用ES的经验,Whoosh是非常好用的。根据笔者的理解和Whoosh的官方文档,Whoosh的入门使用主要是索引和查询。搜索引擎的强大功能之一就是可以提供全文搜索,这取决于排序算法,比如BM25,也取决于我们如何存储字段。因此,index作为名词时,指的是字段的索引,index作为动词时,指的是已建立字段的索引。查询会将我们需要查询的语句通过排序算法给出合理的搜索结果。关于Whoosh的使用,官方文档中已经给出了详细的说明。笔者这里只举一个简单的例子来说明Whoosh是如何方便的提高我们的搜索体检的。示例代码数据本项目的示例数据为poem.csv,下图为数据集的前十行:fields根据数据集的特点,我们创建四个字段:title、dynasty、poem、content。创建的代码如下:#-*-coding:utf-8-*-importosfromwhoosh.indeximportcreate_infromwhoosh.fieldsimport*fromjieba.analyseimportChineseAnalyzerimportjson#createschema,storedisTrue表示可以检索schema=Schema(title=TEXT(stored=True,analyzer=ChineseAnalyzer()),dynasty=ID(stored=True),poem=ID(stored=True),content=TEXT(stored=True,analyzer=ChineseAnalyzer()))其中,ID只能是一个单位值,不能分成几个词。它常用于文件路径、URL、日期和分类;TEXT文件的文本内容在文本中进行索引存储,支持词汇搜索;Analyzer选择stutteringChinesetokenizer。创建索引文件接下来,我们需要创建一个索引文件。我们先用程序解析poem.csv文件,转换成index,写入indexdir目录。