首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Whoosh:Python 的轻量级搜索工具

花下猫语:周末愉快啊!今天还是给大家分享一篇文章。既然你已点进来看了,那说明你对此话题应该是感兴趣的,希望你读后有所收获吧。Best wishes!

来源:Python爬虫与算法 作者:jclian

《犬夜叉》| 请支持B站正版

本文将简单介绍Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码。

Whoosh简介

  Whoosh由Matt Chaput创建,它一开始是一个为Houdini 3D动画软件包的在线文档提供简单、快速的搜索服务工具,之后便慢慢成为一个成熟的搜索解决工具并已开源。

  Whoosh纯由Python编写而成,是一个灵活的,方便的,轻量级的搜索引擎工具,现在同时支持Python2、3,其优点如下:

Whoosh纯由Python编写而成,但很快,只需要Python环境即可,不需要编译器;

默认使用 Okapi BM25F排序算法,也支持其他排序算法;

相比于其他搜索引擎,Whoosh会创建更小的index文件;

Whoosh中的index文件编码必须是unicode;

Whoosh可以储存任意的Python对象。

  Whoosh的官方介绍网站为:https://whoosh.readthedocs.io/en/latest/intro.html 。相比于ElasticSearch或者Solr等成熟的搜索引擎工具,Whoosh显得更轻便,操作更简单,可以考虑在小型的搜索项目中使用。

Index & query

  对于熟悉ES的人来说,搜索的两个重要的方面为mapping和query,也就是索引的构建以及查询,背后是复杂的索引储存、query解析以及排序算法等。如果你有ES方面的经验,那么,对于Whoosh是十分容易上手的。

  按照笔者的理解以及Whoosh的官方文档,Whoosh的入门使用主要是index以及query。搜索引擎的强大功能之一在于它能够提供全文检索,这依赖于排序算法,比如BM25,也依赖于我们怎样储存字段。因此,index作为名词时,是指字段的索引,index作为动词时,是指建立字段的索引。而query会将我们需要查询的语句,通过排序算法,给出合理的搜索结果。

  关于Whoosh的使用,在官文文档中已经给出了详细的说明,笔者在这里只给出一个简单的例子,来说明Whoosh如何能方便地提升我们的搜索体检。

示例代码

数据

  本项目的示例数据为poem.csv,下图为该数据集的前十行:

poem.csv字段

  根据数据集的特征,我们创建四个字段(fields):title, dynasty, poet, content。创建的代码如下:

其中,ID只能为一个单元值,不能分割为若干个词,常用于文件路径、URL、日期、分类;

TEXT文件的文本内容,建立文本的索引并存储,支持词汇搜索;Analyzer选择结巴中文分词器。

创建索引文件

  接着,我们需要创建索引文件。我们利用程序先解析poem.csv文件,并将它转化为index,写入到indexdir目录下。Python代码如下:

index创建成功后,会生成indexdir目录,里面含有上述poem.csv数据的各个字段的索引文件。

查询

  index创建成功后,我们就利用进行查询。

  比如我们想要查询content中含有的诗句,可以输入以下代码:

输出结果如下:

本次分享到此到此结束,感谢大家阅读~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191123A0GJ8J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券