跳转到主要内容

A Lucene查询解析器,生成ElasticSearch查询等!

项目描述

luqum - 使用PLY的Python Lucene查询解析器

Latest PyPI version Documentation Status travis coveralls

logo

“luqum”(类似于LUcene QUery Manipolator)是一个工具,用于解析以Lucene Query DSL编写的查询,并构建一个抽象语法树以检查、分析或操纵搜索查询。

它允许丰富Lucene Query DSL的含义(例如支持嵌套对象搜索或对某些字段进行特殊处理),并将lucene DSL查询转换为原生的ElasticSearch JSON DSL

有了luqum,您的用户可以继续编写如下查询: author.last_name:Smith OR author:(age:[25 TO 34] AND first_name:John),您将能够利用ElasticSearch查询DSL,并控制每个搜索词的确切含义。

Luqum双许可Apache2.0和LGPLv3。

与Python 3.6+兼容

安装

pip安装luqum

依赖项

PLY >= 3.11

完整文档

http://luqum.readthedocs.org/en/latest/

luqum的更改日志

格式基于Keep a Changelog,并且该项目试图遵守语义版本控制

0.13.0 - 2023-03-24

新增

  • 支持无界范围

    添加了对开区间范围的支持,即一个词前面的不等式运算符。在树形结构中,<被称为To,>被称为From。

    此外,还添加了一个TreeTransformer,用于将这些开区间转换为更传统的Range对象。

    为了正确支持转义,对转义序列的工作方式进行了调整。经过仔细评估Apache Lucene如何处理转义序列,发现可以转义随机字符,即使它们会导致未知的转义序列:转义字符总是被返回。这使得支持诸如<=foo之类的操作变得更加简单。

    ElasticsearchQueryBuilder中没有提供支持。

0.12.1 - 2023-02-08

已修复

  • 未知操作和提升的优先级(#89,感谢@JSCU-CNI)

0.12.0 - 2022-10-13

已更改

  • 提升可以是隐式的;默认情况下,提升因子为1

新增

  • 添加对Lucene和Elasticsearch布尔操作的支持(#71,感谢@linefeedse)

    • 引入布尔操作

    • 在ElasticSearch转换器中添加其解析

    • 将其作为未知操作的可能解析器添加(查询中没有显式操作符)

  • 将E元素设置为ElasticsearchQueryBuilder的属性(#75,感谢@qcoumes)

    这允许覆盖EMust、EWord等元素,而无需覆盖ElasticsearchQueryBuilder的方法。

  • 显式支持Python 3.9和Python 3.10(#76)

  • 添加一个线程安全的解析函数(#82)

已修复

  • 将TokenValue.__str__返回值转换为字符串(#74,感谢@delkopiso)

  • 隔离的逗号应解析为单词(#80)

  • 更好地处理转义的通配符

文档

  • 将布尔操作添加到文档中

  • 修复快速入门文档

  • 更新readthedocs说明

CI

  • 使用github actions运行测试

  • 更新所有开发库

    • 从nose切换到pytest,因为nose与python3.10不兼容

    • 删除旧的travis测试

0.11.0 - 2021-01-06

已更改

  • 完全修改了命名模块和auto_name函数,因为它们本身并不实用。

新增

  • 添加了构建关于请求与结果匹配原因的可视化解释的工具(利用Elasticsearch命名查询)。

  • 添加了一个访问者和转换器,在访问树时跟踪元素路径。

已修复

  • 在将luqum树转换为Elasticsearch查询时处理名称,并添加了集成测试。

0.10.0 - 2020-09-22

新增

  • 支持解析正则表达式,如/foo/(尚未转换为Elasticsearch DSL)

  • 基本支持表达式的开头和结尾(分隔符)以及它们在原始文本中的位置(pos和size)

  • 添加了auto_head_tail实用工具(如果您以程序方式构建树并希望有一个可打印的表示,请使用它)

  • 树项现在支持clone_item方法和子项设置器。这应该有助于使转换模式更容易。

  • 添加了新的visitor.TreeVisitorvisitor.TreeTransformer类,以帮助处理树(utils.LuceneTreeVisitorutils.LuceneTreeVisitorV2utils.LuceneTreeTransformer被警告为已弃用(但仍然可用))。

已更改

  • 添加了对python 3.8的支持,取消了对python 3.4和3.5的支持

  • 更好地打印了邻近性和模糊项(保留度数的隐式性质)

  • 在发现非法字符时引发IllegalCharacterError而不是打印和跳过

  • ParseError重命名为ParseSyntaxError,并保留ParseError作为父异常

已修复

  • 范围项在相等时没有检查边界类型

  • 提升项在相等时没有检查强制

  • 重新组织测试

0.9.0 - 2020-07-29

新增

  • 支持Elasticsearch 7

0.8.1 - 2019-11-01

新增

  • 添加Apache 2许可,同时保持LGPLv3+

0.8.0 - 2019-08-02

新增

  • ElasticsearchQueryBuilder中支持multi_match查询。

已修复

  • SchemaAnalyzer应将非文本字段视为not_analyzed

  • ElasticsearchQueryBuilderfield_options参数可以接受match_type代替type来更改请求类型。这是现在比type更受欢迎的方法,因为后者可能会更容易与请求参数冲突。

0.7.5 - 2018-10-29

新增

已修复

  • 在等式中修复了错误,一个树中的子节点比另一个树多,如果第一个节点相同,则不会触发不等式!

0.7.4 - 2018-08-28

新增

  • 处理特殊字符转义

  • 添加了iter_wildcardssplit_wildcards,以便在术语中进行更细粒度的通配符搜索

已修复

  • 修复了在luqum.utils.LuceneTreeTransformer中删除节点时的错误

  • 修复了在luqum.elasticsearch.visitor.ElasticsearchQueryBuilder中处理多个单词上的近似运算符时的错误

  • 测试覆盖率现在检查分支

0.7.3 - 2018-06-08

已修复

  • 在ElasticSearch查询转换中,Luqum将短语中的通配符解释为通配符,而它不应该这样

0.7.2 - 2018-05-14

已修复

  • match_phrase添加了错误的zero_terms_query(在0.7.0版本中引入)。

新增

  • 0.7.0引入了用于单词查询的match查询,而之前它使用的是match_phrase。虽然这更一致,但这可能会在边缘情况下引起困难,因为这可能会导致与先前版本不同的结果。

    可以使用新参数match_word_as_phrase来禁用这种行为,该参数传递给luqum.elasticsearch.visitor.ElasticsearchQueryBuilder。请注意,此参数可能在未来的版本中删除。(每个字段的字段选项可能被用于替代)。

0.7.1 - 2018-03-20

已修复

  • 由于在pypi上的错误上传(重构描述错误)而引入的版本

0.7.0 - 2018-03-20

新增

  • 支持命名查询(见Elastic命名查询

  • 辅助程序,用于从索引配置自动创建ElasticSearch查询构建器选项,请参阅:luqum.elasticsearch.schema

  • luqum.elasticsearch.visitor.ElasticsearchQueryBuilder上的新参数field_options允许向字段查询添加参数。它还允许控制匹配查询的查询类型。

  • 现在对于单个单词的查询,如果字段是分析过的,则将使用“match”查询而不是“match_phrase”。这与“query_string”表达式的行为更一致。

已修复

  • 在utils.TreeTransformerV2中的小修复,它没有按照所述从列表或元组中删除元素

  • 单词匹配现在是match,而不是match_phrase

  • match_phrase有与match相同的zero_terms_query字段

已更改

  • 取消官方Python 3.3支持

0.6.0 - 2017-12-12

新增

  • 管理Elasticsearch转换中的对象字段

已修复

  • 次要修复,当解析错误在内容末尾时,获取更好的错误消息

已更改

  • 更好的嵌套字段处理可能导致更短的请求

0.5.3 - 2017-08-21

新增

  • 一个类,用于智能地用显式操作(ORAND)替换隐式操作

已修复

  • 处理字段名称后面跟有数字的字段(更好地处理表达式中的时间)

已更改

  • 现在使用ply 3.10

0.5.2 - 2017-05-29

已更改

  • 在树转换实用程序中更好的递归(API更改)

已修复

  • 处理Elasticsearch查询构建器的空短语

0.5.1 - 2017-04-10

一个小版本

已更改

  • 改进了打印时的隐式运算符处理

0.5.0 - 2017-04-04

已更改

  • 操作现在支持多个操作数(而不仅仅是两个)。这减轻了非常深层的树结构。

已修复

  • 修复和改进了文档

0.4.0 - 2016-12-05

已更改

  • Lucene查询检查器现在在转换之前检查嵌套字段,以防止错误使用

0.3.1 - 2016-11-23

新增

  • 支持Elastic Search查询中的嵌套字段

已更改

  • 通过向树访问器实用程序添加缓存来提高性能

0.3 - 2016-11-21

(注意,省略了0.2版本)

新增

  • 将Lucene查询转换为Elastic Search查询

  • 添加了一个新的树访问器TreeVisitorV2,更容易使用

已修复

  • 改进了第一个树访问器实用程序及其测试(API更改)

0.1 - 2016-05-17

这是Luqum的初始版本。

新增

  • 解析器和树结构

  • 访问者和转换工具

  • Lucene查询一致性检查器

  • 美化打印

项目详情


下载文件

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

源分布

luqum-0.13.0.linux-x86_64.tar.gz (90.2 kB 查看哈希值)

上传时间

构建分布

luqum-0.13.0-py3-none-any.whl (54.4 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面