本文将简单介绍 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。创建的代码如下:

# -*- coding: utf-8 -*-
import os
from whoosh.index import create_in
from whoosh.fields import *
from jieba.analyse import ChineseAnalyzer
import json# 创建schema, stored为True表示能够被检索
schema = Schema(title=TEXT(stored=True, analyzer=ChineseAnalyzer()),dynasty=ID(stored=True),poet=ID(stored=True),content=TEXT(stored=True, analyzer=ChineseAnalyzer()))

其中,ID 只能为一个单元值,不能分割为若干个词,常用于文件路径、URL、日期、分类;
TEXT 文件的文本内容,建立文本的索引并存储,支持词汇搜索;Analyzer 选择结巴中文分词器。

创建索引文件

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

# 解析poem.csv文件
with open('poem.csv', 'r', encoding='utf-8') as f:texts = [_.strip().split(',') for _ in f.readlines() if len(_.strip().split(',')) == 4]# 存储schema信息至indexdir目录
indexdir = 'indexdir/'
if not os.path.exists(indexdir):os.mkdir(indexdir)
ix = create_in(indexdir, schema)# 按照schema定义信息,增加需要建立索引的文档
writer = ix.writer()
for i in range(1, len(texts)):title, dynasty, poet, content = texts[i]writer.add_document(title=title, dynasty=dynasty, poet=poet, content=content)
writer.commit()

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

查询

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

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

# 创建一个检索器
searcher = ix.searcher()# 检索content中出现'明月'的文档
results = searcher.find("content", "明月")
print('一共发现%d份文档。' % len(results))
for i in range(min(10, len(results))):print(json.dumps(results[i].fields(), ensure_ascii=False))

输出结果如下:

一共发现44份文档。
前10份文档如下:
{"content": "床前明月光,疑是地上霜。举头望明月,低头思故乡。", "dynasty": "唐代", "poet": "李白 ", "title": "静夜思"}
{"content": "边草,边草,边草尽来兵老。山南山北雪晴,千里万里月明。明月,明月,胡笳一声愁绝。", "dynasty": "唐代", "poet": "戴叔伦 ", "title": "调笑令·边草"}
{"content": "独坐幽篁里,弹琴复长啸。深林人不知,明月来相照。", "dynasty": "唐代", "poet": "王维 ", "title": "竹里馆"}
{"content": "汉江明月照归人,万里秋风一叶身。休把客衣轻浣濯,此中犹有帝京尘。", "dynasty": "明代", "poet": "边贡 ", "title": "重赠吴国宾"}
{"content": "秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。", "dynasty": "唐代", "poet": "王昌龄 ", "title": "出塞二首·其一"}
{"content": "京口瓜洲一水间,钟山只隔数重山。春风又绿江南岸,明月何时照我还?", "dynasty": "宋代", "poet": "王安石 ", "title": "泊船瓜洲"}
{"content": "四顾山光接水光,凭栏十里芰荷香。清风明月无人管,并作南楼一味凉。", "dynasty": "宋代", "poet": "黄庭坚 ", "title": "鄂州南楼书事"}
{"content": "青山隐隐水迢迢,秋尽江南草未凋。二十四桥明月夜,玉人何处教吹箫?", "dynasty": "唐代", "poet": "杜牧 ", "title": "寄扬州韩绰判官"}
{"content": "露气寒光集,微阳下楚丘。猿啼洞庭树,人在木兰舟。广泽生明月,苍山夹乱流。云中君不见,竟夕自悲秋。", "dynasty": "唐代", "poet": "马戴 ", "title": "楚江怀古三首·其一"}
{"content": "海上生明月,天涯共此时。情人怨遥夜,竟夕起相思。灭烛怜光满,披衣觉露滋。不堪盈手赠,

现在我邀请你进入我们的软件测试学习交流群:746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

一个 Python 的轻量级搜索工具:Whoosh相关推荐

  1. 一个 Python 的轻量级搜索工具 -- Whose

    本文将简单介绍 Python 中的一个轻量级搜索工具 Whoosh,并给出相应的使用示例代码. # Whoosh 简介 Whoosh 由 Matt Chaput 创建,它一开始是一个为 Houdini ...

  2. 一个Python的轻量级搜索工具--Whose

    本文将简单介绍 Python 中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码. # Whoosh 简介 Whoosh 由 Matt Chaput 创建,它一开始是一个为 Houdini ...

  3. Whoosh:Python 的轻量级搜索工具

    这是「进击的Coder」的第 695 篇技术分享 来源:恋习 Python " 阅读本文大概需要 8 分钟. " 本文将简单介绍 Python 中的一个轻量级搜索工具 Whoosh ...

  4. Python 的轻量级搜索工具:Whoosh

    本文将简单介绍Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码. Whoosh简介   Whoosh由Matt Chaput创建,它一开始是一个为Houdini 3D动画软件包 ...

  5. 秀一款 Python 轻量级搜索工具 -- Whoosh

    本文将简单介绍 Python 中的一个轻量级搜索工具 Whoosh,并给出相应的使用示例代码. # Whoosh 简介 Whoosh 由 Matt Chaput 创建,它一开始是一个为 Houdini ...

  6. python gui测试工具_在Suse10下尝试dogtail(一个python的GUI测试工具..

    你的位置: 技术文档 -> Python -> 文档详情 在Suse10下尝试dogtail(一个python的GUI测试工具.. 零 简介: DogTail是一个用python写的,自动 ...

  7. 推荐一个Python的开源小工具大合集!

    今天推荐一个python的开源项目 python写的各种小工具,涉及的知识比较多,包括pyqt5.简单的爬虫.文本匹配.计算器.二维码制作.端口扫描器等等. 开源地址 https://github.c ...

  8. python实现文件搜索工具(简易版)

    在python学习过程中有一次需要进行GUI 的绘制, 而在python中有自带的库tkinter可以用来简单的GUI编写,于是转而学习tkinter库的使用. 学以致用,现在试着编写一个简单的磁文件 ...

  9. 更新!Python文献超级搜索工具,可关键词搜索并批量下载!

    文献搜索对于广大学子来说真的是个麻烦事,如果你的学校购买的论文下载权限不够多,或者不在校园内,那就很头痛了.幸好,我们有Python制作的这个论文搜索工具,简化了我们学习的复杂性 2020-05-28 ...

最新文章

  1. 数学仍然是人类的“火炬”
  2. 为什么 Python 会成为程序员害怕的编程语言?
  3. 3.Linux 文件的压缩与打包
  4. idea清理svn信息_IntelliJ IDEA SVN的账号修改 信息清除
  5. 文字超出两行 则显示。。。
  6. vue——单文件组件
  7. 最近有啥ML比赛能表现自己的优秀?CVPR2018图像压缩大赛
  8. java buffer类_Java ByteBuffer类
  9. 2021最新软件测试V4.0版本教程
  10. 测量员软件测试版,测量员测距尺子app
  11. 图文安装VMware Workstation教程
  12. 如何设计一个可用的web容器
  13. ei论文计算机,容易写的计算机ei论文题目 计算机ei专业论文题目如何拟
  14. html缩放惯性,js带滚动惯性的视觉差特效插件
  15. linux没有i18n文件,【Linux】/etc/sysconfig/i18n文件详解
  16. qq邮箱 实现邮件的发送
  17. linux发行版中的i386/i686/x86-64/有什么区别?
  18. 如何获取瘦人肠道菌群_与瘦人接吻,交换肠道菌群,就能减肥?
  19. 浏览器开发者工具菜鸡相谈
  20. 解题:THUWC 2017 在美妙的数学王国中畅游

热门文章

  1. ISO 16750.2-2012道路车辆电子电气部件的环境试验 第二部分
  2. 澳洲纽卡斯尓大学计算机排名,澳洲纽卡斯尔大学计算机科学computer science专业排名第251~300名(2020THE泰晤士高等教育世界大学排名)...
  3. 【强化学习论文合集】三十一.2021智能体和多智能体系统国际联合会议论文(AAMAS2021)
  4. VM15安装macOS一些问题,unlocker解锁后无mac选项,mac系统磁盘分区问题
  5. 智能助手Alexa劝人自杀?详谈那些“恐怖”的人工智能
  6. 回转半径的计算公式_截面最小回转半径怎么算,比如300*400的柱子
  7. 陈安之、王顺杰、翟鸿燊这些成功学讲师有些语句确实很发人深省为什么说他们是大忽悠呢?
  8. pip 安装模块时报错:ImportError: cannot import name ‘InvalidSchemeCombination‘ ......
  9. 编辑已有excel文件
  10. h5 淘宝web登录注册1:1还原响应式页面源码