跳转到主要内容

一个小型搜索库。

项目描述

一个小型搜索库。

主要目的是作为一个学习工具,用于教授搜索的基本原理。

适用于嵌入到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 (9.5 kB 查看哈希值)

上传时间 源代码

支持