一个小的搜索库。

microsearch的Python项目详细描述


一个小的搜索库。

主要目的是作为一个学习工具来教授搜索的基础知识。

对于嵌入到不需要的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')

缺点

这个图书馆是用来帮助别人学习的。虽然它有完整的测试覆盖范围, 可能不适合生产使用。你可能不想使用它的原因 实际代码(TM):

  • 无并发支持
    • 尝试以原子方式处理文件
    • 但是没有锁
    • 因此,写入操作可能在进程之间重叠
  • 也许线程安全?
    • 几乎所有东西都在一个实例上
    • 但我还没有用线程对它进行广泛的测试
  • 不支持删除文档
      <> LI>如果现有文档更改或被删除,则将保留过时数据。 在索引中
    • 一种解决方法是清除索引目录,将文档移出 并对它们进行重新编号:/
  • 仅支持N个程序
    • 因为写一个完整的波特或雪球词干是超出需要的 这个库的
  • 没有关于音阶性能的线索
    • 这是一个概念证明和学习工具,notlucene!
    • 在安然语料库的前1.2k份文档上,2011年的mbp为:
        索引在1每秒文件非常慢
      • 搜索速度相当快,每次查询大约0.007秒
      • 索引时RAM从不超过15MB,搜索时为10MB
      • 源repo中的脚本为enron_bench.py

运行测试

使用源代码签出,运行:

在python 2中:

python -m unittest2 tests

在python 3中:

python -m unittest tests

测试应该始终在Python2.7和Python3.2下通过。

贡献

如果您希望为改进microsearch做出贡献,那么您提交的代码 必须:

  • 获得自己的工作和BSD许可
  • 包括工作修复/功能
  • 遵循代码库的现有风格
  • 包括通过新代码的测试覆盖率
  • 如果是面向用户的,则必须包括文档

其他的提交是受欢迎的,但不会被合并,直到所有这些 满足要求。

author:Daniel Lindsley <daniel@toastdriven.com>
date:2011/02/22

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
主类中的java访问方法   Javalog4j不读取它的log4j。属性文件   雅加达ee通过Java(web应用程序)使用iText/任何其他使用现成数据的库生成PDF报告   lua使用java阅读TeamSpeak 3消息   将日期转换为BST java   java Spring引用ProxyFactoryBean中带有ref的protoyype bean   如何使java只打印一条带有if语句的消息   java如何通过JavaMail从雅虎服务器发送电子邮件?   使用百分比和BigDecimal的java测试   java如何对字符串数组排序   java验证器+MVC+REST::更新问题   java如何阻止eclipse如此频繁地挂起?   java从AsyncTask(片段内)访问TextView   IDEJava:制作可调整大小和拖动的组件