跳转到主要内容

Python实现Lunr.js

项目描述

Build Status codecov Supported Python Versions PyPI Read the Docs Downloads

Lunr.py

Lunr.py是Lunr.js的Python实现,由Oliver Nightingale创建。

有点像Solr,但更小,亮度更低。

这个Lunr.js的Python版本旨在将简单而强大的全文搜索功能引入Python,尽可能保证结果与原始实现相近。

这究竟做什么?

Lunr是一个简单的全文搜索解决方案,适用于无法部署像Elasticsearch这样的完整解决方案的情况,或者您只是在进行原型设计。Lunr解析一组文档,并创建一个倒排索引,以便进行快速全文搜索,就像其他更复杂的解决方案一样。

代价是Lunr将倒排索引保存在内存中,并且要求您在应用开始时重新创建或读取索引。

Lunr.py与Lunr.js的互操作性

Lunr.py的核心目标是为JavaScript版本提供互操作性

示例可以在MkDocs 文档库中找到。MkDocs 从文档页面生成一组文档,并在前端使用 Lunr.js 来驱动其内置的搜索引擎。这组文档以 JSON 文件的形式存在,需要在应用程序启动时由 Lunr.js 获取和解析以创建倒排索引。

尽管这对大多数网站来说都不是问题,但根据您的文档集大小,这可能需要一些时间。

Lunr.py 提供了一种后端解决方案,允许您在 Python 中解析文档,并创建一个序列化的 Lunr.js 索引,以便浏览器版本可以读取,从而最小化应用程序的启动时间。

每个 lunr.py 版本针对 lunr.js 的特定版本,并针对非平凡的文档集合产生相同的结果。

安装

pip安装lunr

由于 Natural Language Toolkit 词干提取器的支持,还提供了对其他语言的可选和实验性支持,通过 pip install lunr[languages]。语言功能的用法受NTLK 语料库许可条款约束。

有关更多信息,请参阅语言文档页面

用法

首先,您需要一个代表您要搜索的文档的字典列表。这些文档必须有一个唯一的字段作为参考,以及一系列您要搜索的字段。

Lunr 提供了一个方便的 lunr 函数,可以快速索引这组文档

>>> from lunr import lunr
>>>
>>> documents = [{
...     'id': 'a',
...     'title': 'Mr. Green kills Colonel Mustard',
...     'body': 'Mr. Green killed Colonel Mustard in the study with the candlestick.',
... }, {
...     'id': 'b',
...     'title': 'Plumb waters plant',
...     'body': 'Professor Plumb has a green plant in his study',
... }]
>>> idx = lunr(
...     ref='id', fields=('title', 'body'), documents=documents
... )
>>> idx.search('kill')
[{'ref': 'a', 'score': 0.6931722372559913, 'match_data': <MatchData "kill">}]
>>> idx.search('study')
[{'ref': 'b', 'score': 0.23576799568081389, 'match_data': <MatchData "studi">}, {'ref': 'a', 'score': 0.2236629211724517, 'match_data': <MatchData "studi">}]

有关更多使用示例,请参阅文档

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解安装包的更多信息。

源分布

lunr-0.7.0.post1.tar.gz (1.1 MB 查看哈希值)

上传时间

构建分布

lunr-0.7.0.post1-py3-none-any.whl (35.2 kB 查看哈希值)

上传时间 Python 3

由以下支持