分享Python 的轻量级搜索工具 -- Whoosh

python全文检索库:whoosh Schema 定义了索引的结构,包括字段名称和类型。我的理解就是相当于数据库的建表操作其中stored用于指明是否存储该项的具体值如果为True可以再搜索结果中直接访问到这个字段如果为False的话就只能进行搜索,但是在结果中是无法直接访问具体内容的。原因是倒排索引本身只会建立词元到记录之间的映射关系,并不会保存记录本身。要显示保存记录才能在搜索结果中访问。 阅读详情

本文将简单介绍 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": "海上生明月,天涯共此时。情人怨遥夜,竟夕起相思。灭烛怜光满,披衣觉露滋。不堪盈手赠,  

---------------------------END---------------------------

题外话

感谢你能看到最后,给大家准备了一些福利!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

【Python】Whoosh:全流程自建搜索引擎 在创建索引之前,首先需要定义架构。这可以通过模块来实现。FieldType描述使用场景TEXT存储文本内容,支持分词和搜索文章内容、评论、描述等文本字段ID存储唯一标识符,通常用于标识文档文档ID、路径、用户ID等NUMERIC存储数字值,可以用于范围查询年龄、价格、评分等数值字段BOOLEAN存储布尔值(True/False)标记状态、启用/禁用等DATETIME存储日期和时间,支持日期范围查询创建时间、更新时间等KEYWORD存储单一值的关键字,适合用于精确匹配。 阅读详情

相关推荐

Python轻量级搜索方案:Whoosh+Jieba打造个人知识库全文检索(附避坑指南)

本文详细介绍了如何利用Python的Whoosh库结合Jieba中文分词,构建一个轻量级的本地全文搜索引擎,用于个人知识库管理。文章提供了从环境配置、索引构建到高级查询优化的完整实践指南,并分享了性能调优和实战避坑经验,帮助开发者快速实现高效的中文全文检索功能。

weixin_29048309的博客 361

python的全文检索库Whoosh使用示例

pip install whoosh 首先,我有一个xiaoshuo文件夹,装了几部小说 直接上代码: 首先是创建索引的文件 from whoosh.filedb.filestore import FileStorage from whoosh.fields import * from jieba.analyse import ChineseAnalyzer import os analy...

李孟笛的博客 2366

Python轻量级搜索神器Whoosh实战:5分钟搞定中文全文检索(附Jieba分词配置)

本文介绍了如何使用Python轻量级搜索引擎Whoosh快速构建中文全文检索系统。通过集成Jieba分词器解决中文分词难题,文章详细展示了从环境配置、索引创建到实战搜索的完整流程,并对比了Whoosh与传统SQL模糊查询的性能优势,为中小型项目提供了高效、易用的搜索解决方案。

weixin_29100399的博客 408

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

Whoosh 由 Matt Chaput 创建,它一开始是一个为 Houdini 3D 动画软件包的在线文档提供简单、快速的搜索服务工具,之后便慢慢成为一个成熟的搜索解决工具并已开源。Whoosh 纯由 Python 编写而成,是一个灵活的,方便的,轻量级的搜索引擎工具,现在同时支持 Python2、3,其优点如下:Whoosh 纯由 Python 编写而成,但很快,只需要 Python 环境即可,不需要编译器;默认使用 Okapi BM25F 排序算法,也支持其他排序算法;

Python栈_基的博客 1178

Python全文搜索库:Whoosh和Haystack

Python全文搜索库:Whoosh和Haystack 1.背景介绍 1.1 什么是全文搜索? 全文搜索(Full-Text Search)是一种在大量非结构化或半结构化的数据中查找相关信息的技术。与传统的数据库查询不

AI天才研究院 1751

RACECAR底层平台安装:Jetson Nano+ROS Melodic全栈部署指南

移动机器人开发中,底层平台安装是将硬件转化为可编程移动平台的关键起点。其核心在于嵌入式系统、ROS中间件与传感器驱动的深度协同——需兼顾内核模块加载、GPIO/PWM精确控制、I2C设备初始化及ROS工作空间构建等多层技术耦合。尤其在竞速级小车如RACECAR场景下,Jetson Nano的硬件加速能力、MPU6050 IMU固件加载、TB6612FNG电机驱动配置等细节,直接决定运动控制精度与实时性。本文聚焦Ubuntu 18.04 + ROS Melodic + JetPack 4.4.1技术栈,覆盖从

weixin_32025789的博客 256

Whoosh:Python 的轻量级搜索工具

这是「进击的Coder」的第 695篇技术分享来源:恋习 Python“ 阅读本文大概需要 8 分钟。 ”本文将简单介绍 Python 中的一个轻量级搜索工具 Whoosh,并给出相应的使用示例代码。Whoosh 简介  Whoosh 由 Matt Chaput 创建,它一开始是一个为 Houdini 3D 动画软件包的在线文档提供简单、快速的搜索服务工具,之后便慢慢成...

静觅 921

CANoe开发入门到精通读书笔记(2)——CAPL编程

CAPL函数的语法跟C语言很类似,但也包含一些C语言所不具备的功能大部分CAPL支持的数据类型都可以直接声明为函数参数, 例如,整型、浮点型、枚举、结构、定时器以及它们的引用。但有一些类型不能被直接声明,而需要加上*号(注意该符号并不是C语言中 指针的意思)。例 如 : signal * s 、 envvarInt * ev 、 sysvarFloat * sv 、 diagRequest * dr、diagResponse * dr、int matrix[][],以及。

weixin_66275497的博客 6459

json schema生成工具_Whoosh:Python 的轻量级搜索工具

?“Python猫” ,一个值得加星标的公众号花下猫语:周末愉快啊!今天还是给大家分享一篇文章。既然你已点进来看了,那说明你对此话题应该是感兴趣的,希望你读后有所收获吧。Best wishes!来源:Python爬虫与算法作者:jclian《犬夜叉》| 请支持B站正版本文将简单介绍Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码。Whoosh简介   Whoo...

weixin_39576294的博客 388

SRAM compiler中Power Gating与Retention的实战配置指南

本文深入解析了在SRAM compiler中配置Power Gating(电源门控)与Retention(数据保持)功能的实战指南。针对低功耗芯片设计,文章详细阐述了如何根据应用场景(如移动AP、IoT设备)权衡开关类型、尺寸、唤醒时序以及保持电压,以实现静态功耗优化与数据可靠性的最佳平衡,并强调了后端实现与签核检查的关键要点。

weixin_29204121的博客 296

AFSim仿真系统—几何视角下的子系统交互机制解析

本文深入解析了AFSim仿真系统中子系统交互的几何机制。通过剖析世界坐标系、实体坐标系、部件坐标系等七层空间定位体系,阐述了传感器探测、目标指示等交互行为背后的几何原理与限制条件。掌握这套几何视角,是构建高保真、符合物理现实的AFSim仿真模型的关键,能有效避免坐标混乱、交互失效等常见问题。

terraform7cloud的博客 493

【Python】Whoosh:从零构建轻量级搜索引擎实战指南

本文详细介绍了如何使用Python的Whoosh库从零构建轻量级搜索引擎,涵盖索引构建、查询优化、中文搜索处理等实战技巧。Whoosh作为纯Python实现的搜索库,具有零依赖、内存友好和开发效率高等优势,特别适合中小型项目快速实现站内搜索功能。

weixin_29042035的博客 156

开源实战 | 基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程

本文详细介绍了基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程,涵盖从基础概念到实战技巧的各个环节。通过SolidWorks建模、Matlab运动学实现及轨迹优化策略,展示了如何实现高精度轨迹规划,适用于摄影、医疗等领域的机器人应用。

weixin_28331555的博客 404

有没有可以搜索python程序的软件-python搜索功能

广告关闭2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。ios开发如果之前没接触过除了c和c++(c++太难了,不花个十来年基本不可能精通)的语言,第二门语言最好的选择就是python.原因就是1. 语法简单2. 库太多,随便想要什么功能的库都找得到,简直编程界的哆啦a梦. 3.语法优美,不信? 你去看看python超过两千行的代...

weixin_37988176的博客 986

解锁Cherry Studio高阶玩法:用MCP实现自动化测试与数据爬取

本文深入探讨了如何利用MCP协议与Cherry Studio结合,实现自动化测试与数据爬取的高阶应用。通过Playwright等工具的MCP集成方案,详细解析了自动化测试流水线构建和智能爬虫系统开发的关键技术,显著提升工程效率和系统适应性。

defi6farmer的博客 275

Sigmastar平台WDR调试实战:从参数解析到鬼影消除的完整指南

本文提供了Sigmastar平台宽动态(WDR)技术的实战调试指南。针对逆光、运动场景下的核心痛点,系统性地解析了从多曝光采集、HDR融合到色调映射的完整管线,并重点阐述了如何通过调整曝光比、运动阈值与调整曲线等关键参数,有效消除运动鬼影、平衡暗部噪声与细节,最终实现清晰稳定的图像效果。

Jerry的专栏 926

Python Whoosh实战:5分钟搭建你的第一个本地搜索引擎(附完整代码)

本文详细介绍了如何使用Python的Whoosh库快速搭建本地搜索引擎。通过5分钟实战教程,从环境配置、索引创建到中文分词集成,手把手教你构建一个功能完整的搜索应用,并附有完整的Flask API示例代码,是Python开发者实现轻量级全文检索的理想选择。

o5p6q的博客 453

告别测序污染:手把手教你用Decontam+SCRUB+FEAST完成微生物组数据清洗全流程

本文详细解析了使用Decontam、SCRUB和FEAST三大工具完成微生物组数据清洗的全流程。从环境准备、数据导入到污染物识别、样本间污染校正及溯源分析,提供了一套可复用的污染校正工作流,帮助研究者提升数据质量,确保后续分析的可靠性。

weixin_33462927的博客 317

【亲测免费】 推荐项目:Kerko —— 构建强大文献搜索界面的利器

推荐项目:Kerko —— 构建强大文献搜索界面的利器 在学术研究和知识管理领域,高效地分享和探索文献库是至关重要的。今天,我们向您隆重推介一款开源神器——Kerko,它完美结合了Zotero参考管理器的力量与现代网页应用的便捷性,为您提供了一站式的文献搜索与浏览解决方案。 项目介绍 Kerko是一个轻量级的web组件,旨在为使用Zotero管理的文献库提供直观且功能强大的在线检索和导航界面。通...

gitblog_00161的博客 552

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

自己电脑搭建个人知识库,一般电脑也能玩(支持通义千问、GPT等)。零基础入门到精通,看这篇就够了!赶紧收藏!

既不花钱,一般电脑又能玩的方案,一句话总结:本地大模型(qwen:7b)+ 文档搜索工具(whoosh)使用此方案搭建的LLM+个人知识库,网页界面demo如下:若提问内容在我们的文档系统中,输出哪些文档命中,包括内容,然后大模型Qwen自动对内容进行深度分析。总体来说,这种模式充分发挥了高性能检索+LLM问答的两者优势,用起来还是挺舒服的。

bagell的博客 2673

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

1小时搭建BM25搜索引擎原型

善用现有库:不要重复造轮子,成熟的库能节省大量时间聚焦核心功能:原型阶段不必追求完美,够用就行保持简单:简洁的代码和界面更容易维护和扩展提供示例:帮助用户快速理解和使用整个过程从零开始到完成,大约花了1小时左右。这让我深刻体会到,借助现代开发工具和库,实现一个可用的原型可以如此高效。如果你想尝试这个BM25搜索引擎原型,或者有类似的项目需求,可以试试InsCode(快马)平台。它提供了在线的开发环境,无需配置本地环境就能快速实现和测试这类项目。

SilverfoxOwl19的博客 296

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

BM25算法解析:AI如何优化搜索排序

下面我会拆解整个实现过程,特别适合想了解搜索原理或需要快速搭建简易搜索系统的朋友。上开发特别顺畅,它的在线编辑器可以直接运行调试Python代码,还能一键部署成可访问的Web服务。我测试时将包含10万条数据的索引构建时间从本地环境的15秒缩短到平台上的8秒,搜索响应基本在200ms内完成。对于想快速验证搜索算法效果的同学,这种免配置的开发环境确实省心。特别是部署环节,传统方式需要自己折腾服务器和Nginx配置,在InsCode上点击按钮就能生成可分享的演示链接,连前端界面都能实时预览修改效果。

SilverMoon18的博客 391

比直接访问更高效:Python官网内容本地化方案

作为一名Python开发者,经常需要查阅官方文档,但每次访问官网等待加载、网络延迟等问题实在影响效率。为了解决这个问题,我尝试开发了一个Python文档本地化系统,实现秒级搜索响应,体验比官网快10倍。下面分享我的实现思路和经验。的一键部署功能后,整个项目可以快速上线,不需要手动配置Python环境和数据库。平台提供了完整的运行环境,还能随时通过网页访问,非常方便。如果你也是Python开发者,不妨试试这个方案,相信能大幅提升你的开发效率。这个过程平均耗时约5-10秒,如果网络不好可能更久。

MoonbeamRaven28的博客 382

用快马 AI 轻松打造你的高效桌面:iTop Easy Desktop 替代方案

对于想DIY效率工具又不想折腾环境的开发者,这种全在线的方式确实能节省大量时间。从有个想法到产出可用的工具,前后只用了两个周末,这在传统开发模式下很难想象。不过作为开发者,我更想定制一个符合自己习惯的解决方案。如果你也受困于Windows桌面管理的低效,不妨试试用快马平台快速打造属于自己的解决方案。作为程序员和效率工具爱好者,我一直追求用技术优化日常工作流。开发了一个轻量级桌面管理工具,分享下从构思到落地的全过程。在InsCode上完成开发后,最惊喜的是其。通过注册表持久化用户自定义布局。

IndigoNight21的博客 849

零基础搭建个人网盘搜索引擎

数据库选用轻量级的SQLite,不需要额外安装,直接通过Python内置模块就能操作。支持的文件类型包括常见的文档、图片、视频等格式,通过文件后缀名就能识别分类。作为一个非科班出身的新手,我摸索出了一个简单易行的方案,分享给同样有需求的朋友们。遇到卡壳时,平台内置的AI辅助能快速给出解决方案,比自己查资料效率高多了。过程中遇到的主要问题是中文搜索的准确性,后来发现需要确保数据库和Python代码使用统一的UTF-8编码。最惊喜的是可以一键部署,不用折腾服务器配置,生成链接就能分享给朋友测试。

SilvermistRaven28的博客 481

1小时快速原型:用TortoiseGit搭建个人项目管理系统

最近在整理个人项目时,发现文档、代码和任务管理总是乱七八糟。尝试过各种专业工具,要么太复杂,要么无法满足定制化需求。于是决定用TortoiseGit快速搭建一个轻量级解决方案,分享下这个1小时就能上手的原型开发过程。右键菜单直接操作版本控制,省去了频繁切换IDE的麻烦。上完成,它的在线编辑器支持实时预览,调试Python脚本特别方便。最惊喜的是部署功能,点几下就能把原型变成可分享的网页应用。最终成型的系统虽然简单,但完全满足个人使用需求。对于快速验证想法来说,这种开箱即用的体验确实省时省力。

RubyLion28的博客 378
上一篇: Python 的八个实用的“无代码”特性
下一篇: 详解5个Python自动化探索性数据分析库
Python_P叔
博客等级 码龄3年 5451粉丝 827原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值