一个小型搜索库。
项目描述
一个小型搜索库。
主要目的是作为一个学习工具,用于教授搜索的基本原理。
适用于嵌入到Python应用程序中,在这些应用程序中,您不需要像Lucene这样的复杂搜索功能。
是我(即将发布的)2012年PyCon演讲的一部分 - https://us.pycon.org/2012/schedule/presentation/66/
需求
Python 2.5+ 或 Python 3.2+
(可选) simplejson
(可选) unittest2 (Python 2.5 - 用于运行测试)
用法
示例
import microsearch # Create an instance, pointing it to where the data should be stored. ms = microsearch.Microsearch('/tmp/microsearch') # Index some data. ms.index('email_1', {'text': "Peter,\n\nI'm going to need those TPS reports on my desk first thing tomorrow! And clean up your desk!\n\nLumbergh"}) ms.index('email_2', {'text': 'Everyone,\n\nM-m-m-m-my red stapler has gone missing. H-h-has a-an-anyone seen it?\n\nMilton'}) ms.index('email_3', {'text': "Peter,\n\nYeah, I'm going to need you to come in on Saturday. Don't forget those reports.\n\nLumbergh"}) ms.index('email_4', {'text': 'How do you feel about becoming Management?\n\nThe Bobs'}) # Search on it. ms.search('Peter') ms.search('tps report')
缺点
这个库的目的是帮助他人学习。虽然它有完整的测试覆盖率,但它可能不适合生产使用。您可能不想在真实代码中使用它的原因
没有并发支持
试图以原子方式与文件一起工作
但没有锁
因此,进程之间的写操作可能会重叠
可能线程安全?
几乎所有内容都在实例上
但我没有对其进行过广泛的线程测试
不支持删除文档
如果现有文档发生变化或被删除,索引中将会留下旧数据
一种解决方案是删除索引目录,移动文档并重新索引它们 :/
只支持n-gram
因为编写完整的Porter或Snowball词干提取器超出了这个库的需求
对扩展性能没有了解
这是一个概念验证和学习工具,不是 Lucene!
在2011 MBP上对Enron语料库的前1.2K个文档进行索引
索引速度相当慢,大约每秒处理1个文档
搜索速度相当快,每查询大约0.007秒
索引时RAM从未超过15Mb,搜索时为10Mb
源代码库中的脚本为enron_bench.py。
运行测试
使用源代码检出,运行
在Python 2中
python -m unittest2 tests
在Python 3中
python -m unittest tests
在Python 2.7和Python 3.2下,测试应始终通过。
贡献
如果您想为改进microsearch做出贡献,您提交的代码必须
是您的原创作品且采用BSD许可
包含有效的修复/功能
遵循代码库的现有风格
包括新代码的通过测试覆盖率
如果是面向用户的,必须包含文档
欢迎其他提交,但必须满足所有这些要求才能合并。
- 作者::
Daniel Lindsley <daniel@toastdriven.com>
- 日期::
2011/02/22
项目详情
microsearch-1.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 731aa64f2e2cffed60c97c4d051ba118b80c655ca25d15e001341d7cb035c4a4 |
|
MD5 | cfc750c8832b9582fe6ea3e492b684f2 |
|
BLAKE2b-256 | 98a44392a153b9babde4d15405f2e74c326b6a69c0299cba33d0e2bd3029ec26 |