默认查询语言

概述

查询包括 terms 和 算子. 有两种类型的术语:单个术语和 短语. 多个术语可以与运算符组合,例如 AND 和 OR.

whoosh支持在不同的 领域. 必须指定 default field 当你创建 whoosh.qparser.QueryParser 对象。这是一个字段,在该字段中,将搜索用户未明确指定字段的任何术语。

whoosh的查询解析器能够通过使用插件来解析不同的和/或额外的语法。见 正在分析用户查询 .

个别术语和短语

查找包含术语的文档 render ::

render

查找包含短语的文档 all was well ::

"all was well"

请注意,字段必须存储用于在该字段中工作的短语搜索的位置信息。

通常,当您指定一个短语时,短语中每个单词的最大位置差为1(即,文档中的单词必须紧挨在一起)。例如,如果文档 library 5个字以内 whoosh ::

"whoosh library"~5

布尔运算符

查找包含 render and shading ::

render AND shading

请注意,和是术语之间的默认关系,因此这与以下内容相同:

render shading

查找包含 renderand 也不是 shading or modeling ::

render AND shading OR modeling

查找包含 render 但是 not 建模::

render NOT modeling

查找包含 alpha 但也不是 betagamma ::

alpha NOT (beta OR gamma)

注意,如果在两个术语之间没有指定布尔运算符,解析器将在默认情况下插入一个。所以这个查询:

render shading modeling

等于(默认情况下)::

render AND shading AND modeling

customizing the default parser 有关如何将默认运算符更改为或的信息。

将运算符与括号组合在一起。例如,查找包含 rendershading 或包含 modeling ::

(render AND shading) OR modeling

领域

找到这个词 ivanname 领域:

name:ivan

这个 field: prefix仅为其直接前面的词设置字段,因此查询::

title:open sesame

将搜索 opentitle 字段和 sesamedefault 字段。

要将字段前缀应用于多个术语,请用括号将其分组::

title:(open sesame)

同:

title:open title:sesame

当然,您也可以为短语指定一个字段:

title:"open sesame"

Inexact术语

使用“globs”(通配符表达式使用 ? 表示单个字符和 * 表示任意数量的字符)以匹配术语:

te?t test* *b?g*

注意,通配符以 ?* 很慢。还要注意,这些通配符只匹配 个别条款. 例如,查询:

my*life

not 匹配索引短语,如:

my so called life

因为这是四个独立的术语。

范围

您可以匹配一系列术语。例如,下面的查询将匹配包含词法范围中词条的文档 applebear 包容的. 例如,它将匹配包含 azoresbe 但不是 blur ::

[apple TO bear]

当您以词汇排序格式(例如,YYYYMMDD)存储日期时,这非常有用:

date:[20050101 TO 20090715]

范围正常 inclusive (即,范围将匹配开始和结束术语之间的所有术语, as well as 开始和结束术语本身)。您可以指定范围的一端或两端是 exclusive 通过使用 {{ 和/或 }} 性状:

[0000 TO 0025}
{prefix TO suffix}

您还可以指定 open-ended 不包括开始或结束术语的范围:

[0025 TO]
{TO suffix}

提升查询元素

可以指定查询的某些部分对于计算匹配文档的分数比其他部分更重要。例如,要指定 ninja 比其他词重要一倍,而且 bear 重要性的一半是:

ninja^2 cowboy bear^0.5

您可以使用分组括号对多个术语应用boost::

(open sesame)^2.5 roc

从文本中生成术语

如果需要在通常由解析器特殊处理的术语中包含字符,例如空格、冒号或括号,可以将术语括在单引号中::

path:'MacHD:My Documents'
'term with spaces'
title:'function()'