Docs
搜索文档...⌘K

筛选语法

某些 API 端点接受 where 参数,用于对结果集进行筛选。

以下各节提供了一些筛选用法示例以及完整的语法参考。

例子

info

如需更多真实场景示例,可在 ahrefs.com 上使用我们的可视化界面对某份报告应用一些筛选条件,然后点击 API {} 按钮,查看生成的 API v3 查询中的 where 参数。

字段“foo”等于 3:

{ "field": "foo", "is": ["eq", 3] }

对于 object 类型的字段,请使用点号表示法引用嵌套字段。 字段“bar”(嵌套在字段“foo”下)等于 3:

{ "field": "foo.bar", "is": ["eq", 3] }

整数型字段“foo”等于 3,且整数型字段“bar”小于 10:

{
    "and": [
        { "field": "foo", "is": ["eq", 3] },
        { "field": "bar", "is": ["lt", 10] }
    ]
}

要么字符串字段“foo”的值转为大写后等于“AHREFS”,要么数组字段“bar”中的所有字符串元素都以前缀“Ahrefs”开头并以后缀“seo”结尾。

{
  "or": [
    {
      "field": "foo",
      "modifier": "uppercase",
      "is": ["eq", "AHREFS"]
    },
    {
      "field": "bar",
      "list_is": {
        "and": [
          ["prefix", "Ahrefs"],
          ["suffix", "seo"],
        ]
      }
    }
  ]
}

语言参考

筛选语法由以下语法描述,以 BNF 风格的记号表示。

用尖括号 \<> 括起来的术语表示一个符号。 符号后跟 + 表示包含该符号的非空数组。 对象字段前的 ? 表示该字段为可选。

两个终结符定义如下:

  • \<field_alias> 筛选字段别名。 有效别名列表请参阅相应端点的文档。 请注意,selectwhere 参数可接受的别名可能不同。
  • \<value> 一个 JSON 值。 它应与字段的类型(如果存在修饰符,则与修饰符所对应的类型)相匹配。

不同工具在正则表达式过滤器中允许使用的模式有所不同。

  • Keywords Explorer:仅支持将 * 作为通配符运算符。
  • Site Explorer:RE2 语法。
\<bool_filter> ::= { "and" : \<bool_filter>+ }
              |   { "or" : \<bool_filter>+ }
              |   { "not" : \<bool_filter> }
              |   \<expr>

\<expr> ::= {
             "field" : \<field_alias>,
             ? "is": \<condition>,
             ? "list_is": \<list_condition>
           }

\<condition> ::= [ "eq", \<value> ]
            |   [ "neq", \<value> ]
            |   [ "gt", \<value> ]
            |   [ "gte", \<value> ]
            |   [ "lt", \<value> ]
            |   [ "lte", \<value> ]
            |   [ "substring", \<value> ]
            |   [ "isubstring", \<value> ]
            |   [ "phrase_match", \<value> ]
            |   [ "iphrase_match", \<value> ]
            |   [ "prefix", \<value> ]
            |   [ "suffix", \<value> ]
            |   [ "regex", \<value> ]
            |   "empty"
            |   "is_null"

\<condition_bool_filter> ::= { "and" : \<condition_bool_filter>+ }
                        |   { "or" : \<condition_bool_filter>+ }
                        |   { "not" : \<condition_bool_filter> }
                        |   \<condition>

\<list_condition> ::= { "any" : \<condition_bool_filter> }
                 |   { "all" : \<condition_bool_filter> }