• 操作符
查询字符串可以包含特定的操作符,这些操作符定义了查询字符串中的单词应如何匹配的条件。
布尔操作符
AND 操作符
一个隐式的逻辑 AND 操作符总是存在,所以 "hello world" 意味着匹配的文档必须同时包含 "hello" 和 "world"。
注意:没有显式的 AND
操作符。
OR 操作符
逻辑 OR 操作符 | 的优先级高于 AND,所以 looking for cat | dog | mouse
表示 looking for (cat | dog | mouse)
而不是 (looking for cat) | dog | mouse
。
注意:没有 OR
操作符,请使用 |
代替。
MAYBE 操作符
MAYBE
操作符类似于 |
操作符,但它不会返回仅匹配右侧子表达式的文档。
否定操作符
否定操作符强制规则,即某个单词不应存在。
字段搜索操作符
字段限制操作符将后续搜索限制在指定字段中。默认情况下,如果给定字段名在搜索的表中不存在,查询将失败并返回错误信息。然而,这种行为可以通过在查询开头指定 @@relaxed
选项来抑制:
这在通过不同模式的异构表进行搜索时非常有用。
字段位置限制进一步将搜索限制在给定字段的前 N 个位置。例如,@body [50] hello
将不会匹配那些关键词 hello 出现在 body 字段中的第 51 位或更后的文档。
多字段搜索操作符:
忽略字段搜索操作符(忽略来自 ‘title’ 字段的 ‘hello world’ 匹配):
忽略多字段搜索操作符(如果有字段 ‘title’,‘subject’,‘body’,则 @!(title)
等价于 @(subject,body)
):
全字段搜索操作符:
短语搜索操作符
短语操作符要求单词彼此相邻。
短语搜索操作符可以包含一个 “匹配任意词” 修饰符。在短语操作符内,词语的位置很重要。当使用 “匹配任意词” 修饰符时,短语查询中的后续词语的位置将被移动。因此,“匹配任意词” 修饰符不会影响搜索性能。
近邻搜索操作符
近邻距离以词数来衡量,适用于引号内的所有词语。例如,查询 "cat dog mouse"
~5 表示必须有少于 8 个词语的范围包含所有 3 个词。因此,一个包含 CAT aaa bbb ccc DOG eee fff MOUSE
的文档不会匹配此查询,因为该范围恰好是 8 个词长。
多数匹配操作符
多数匹配操作符引入了一种模糊匹配类型。它只会匹配满足指定词语数量阈值的文档。在上述示例 ("the world is a wonderful place"/3
) 中,它将匹配包含至少 6 个指定词中 3 个的文档。该操作符的限制是最多 255 个关键词。你还可以提供 0.0 到 1.0 之间的值(分别表示 0% 和 100%),Manticore 仅匹配包含至少指定百分比词语的文档。同样的例子也可以表示为 "the world is a wonderful place"/0.5
,它将匹配至少包含 6 个词中 50% 的文档。
严格顺序操作符
严格顺序操作符(也称为 "之前" 操作符)仅在其参数关键词出现在文档中的顺序与查询中指定的顺序完全一致时才匹配文档。例如,查询 black << cat
将匹配文档 "black and white cat",但不会匹配文档 "that cat was black"。顺序操作符优先级最低,它可以应用于单个关键词以及更复杂的表达式。例如,这是一个有效查询:
精确形式修饰符
作为影响关键词的修饰符,它可以在操作符中使用,例如短语、近邻和多数匹配操作符。将精确形式修饰符应用于短语操作符时,它会自动将该修饰符添加到短语中的所有词语上。
通配符操作符
此外,支持以下内联通配符操作符:
?
匹配任意单个字符:t?st
将匹配test
,但不匹配teast
%
匹配零个或一个字符:tes%
将匹配tes
或test
,但不匹配testing
内联操作符需要 dict=keywords
和已启用的 infixing。
正则表达式操作符
字段开头与字段结尾修饰符
字段开头与字段结尾关键词修饰符确保关键词仅在它出现在全文字段的最开头或最结尾时匹配。例如,查询 "^hello world$"
(使用引号将短语操作符与开头/结尾修饰符结合)将仅匹配至少有一个字段包含这两个特定关键词的文档。
IDF boost modifier
NEAR 操作符
NEAR
操作符是一个更通用的近邻操作符。其语法为 NEAR/N
,区分大小写,不允许在 NEAR
关键词、斜杠符号和距离值之间有空格。
需要注意的是,one NEAR/7 two NEAR/7 three
并不完全等同于 "one two three"~7
。关键区别在于,近邻操作符允许在三个匹配词之间最多出现 6 个不匹配词,而使用 NEAR
的版本则更不严格:它允许 one
和 two
之间最多有 6 个词,然后 two
和 three
之间再允许最多 6 个词。
NOTNEAR 操作符
NOTNEAR
操作符作为一种否定断言。当左参数存在,并且右参数要么不存在于文档中,要么与左匹配参数末尾相隔指定距离时,它会匹配文档。距离以词语为单位表示。语法为 NOTNEAR/N
,区分大小写,并且不允许在 NOTNEAR
关键词、斜杠符号和距离值之间有空格。该操作符的两个参数可以是词语、任意操作符或操作符组。
SENTENCE 和 PARAGRAPH 操作符
SENTENCE
和 PARAGRAPH
操作符在其两个参数位于同一段落或同一句话中时匹配文档。这些参数可以是关键词、短语或相同操作符的实例。
ZONE 限制操作符
ZONE 限制
操作符与字段限制操作符相似,但将匹配限制在指定的字段区域或区域列表中。需要注意的是,后续子表达式不需要在给定区域的单个连续跨度内匹配,可以跨越多个跨度匹配。例如,查询 (ZONE:th hello world)
将匹配以下示例文档:
ZONESPAN 限制操作符
ZONESPAN
限制操作符类似于 ZONE
操作符,但要求匹配发生在单个连续跨度内。在前面的示例中,ZONESPAN:th hello world
不会匹配文档,因为 "hello" 和 "world" 没有出现在同一个跨度内。
最后更新于