用python构建lucene文本查询的dsl。

lucene-querybuilder的Python项目详细描述


synopsis:A Python DSL for Lucene queries.

轻松创建lucene查询字符串,无需学习语言本身。该语法使用简单,允许从多个较小的查询创建较大的查询。有关正确lucene查询的基本课程可以在here中找到。

支持Python2.6+。

开始

>>> from lucenequerybuilder import Q

创建查询

基本查询可以通过将字符串传入q的构造函数来给出。

>>> q = Q('a')
>>> q = Q('The quick brown fox')

查询构建器将自动检测一个术语(没有空格)还是一个短语(多个术语一起用空格分隔),并用引号将它们正确地绑定。

所有术语和短语都将被取消转义,并将被转义:

>>> q = Q(r'The *quick* brown (fox)')

>>> str(q)

'"The \\*quick\\* brown \\(fox\\)"'

范围查询

范围也很容易放入查询中。有两种类型的范围查询,包含范围和排除范围。这些将通过关键字参数传递到查询生成器中。

>>> q = Q(inrange=(1,5))
>>> q = Q(exrange=['egg','hgg'])

ranges可用于任何长度为2的列表式对象。

链接查询

您可以使用&;(and)、(or)、&;~(and not)、+(must)和-(must not)链接查询。并且,或者,并且不需要在它出现之前和之后进行查询。必须而且不仅必须在之后直接处理查询。下面是一些示例:

>>> q = Q('a') & Q('b')

>>> q = Q('a') & ~Q('b')

>>> q = +Q('a') -Q('b')

嵌套查询

查询可以相互嵌套以创建新查询。这使得将查询分组变得很容易。以下示例:

>>> q = Q(Q('a') & Q('b')) & ~Q('c')

>>> q = Q(Q(Q('a') | Q(inrange=[1,2])) +Q('c))

字段

通过将字段作为第一个参数放入查询,可以将字段添加到查询中。字段不能有任何空格,也不能相互嵌套。以下示例是有效的查询:

>>> q = Q('name', 'Edward')

>>> q = Q('text', 'Mary had a little lamb')

>>> q = Q('age', inrange=[10, 9001])

以下示例是将引发错误的无效查询:

>>> q = Q('name', Q('lastname', 'Purcell'))

>>> q = Q('bad', Q('range', inrange=[10, 9001]))

模糊查询

使用fuzzy关键字可以完成模糊术语查询:

>>> q = Q('name', fuzzy=('edd', .2))

>>> str(q)

'name:(edd~0.200)'

模糊元组中的第一个元素是术语,第二个元素是相似度比率-浮点数、str或介于0和1之间的小数。

如果删除第二个元素,只提供str,则字符串将表示使用lucene的默认比率-0.5:

>>> q = Q('name', fuzzy='edd')

>>> str(q)

'name:(edd~)'

通配符查询

为了防止通配符查询有'?'和'*'被转义,简单地包括通配符标志:

>>> str(Q('c?t', wildcard=True))

'c?t'

与“猫”或“小床”匹配。

增强通配符查询

这些查询尚不受支持,但将很快提供。随时添加支持自己和要求拉!

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

推荐PyPI第三方库


热门话题
datetime如何使用JodaTime在Java中设置时间属性   java固定算法的性能时间   java如何从JMenu中获取所选项以更改文本区域的文本颜色?   java配置单元UDF传递数组<string>作为参数   javaapachebeam和BigQuery   java与PrintWriter之间的差异。printf和PrintWriter。格式方法   继承如何处理按Java版本更改的导入,以及在多个版本上编译   xml java。lang.noClassDefFoundant生成错误   java如何使用包含映射的JSON发送POST请求?   java如何在任何应用程序的JAR文件中绑定MySql数据库?   Java脚本解释器   sslhttpclientjava。网SocketException:未实现未连接的socket   java如何为Android应用程序创建类似于Cron作业的东西   java JButton+radiobox+复选框   java内存管理将文件写入内存   java这是计算对象实例的有效方法吗?   用于死锁情况的java代码?   JavaSpring容器作为新实体插入,而不是存储在表中