前缀查询

编辑

返回在提供的字段中包含特定前缀的文档。

示例请求

编辑

以下搜索返回 user.id 字段包含以 ki 开头的词项的文档。

resp = client.search(
    query={
        "prefix": {
            "user.id": {
                "value": "ki"
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      prefix: {
        'user.id' => {
          value: 'ki'
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    prefix: {
      "user.id": {
        value: "ki",
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "prefix": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}

prefix 的顶层参数

编辑
<field>
(必需,对象)您要搜索的字段。

<field> 的参数

编辑
value
(必需,字符串)您希望在提供的 <field> 中查找的词项的起始字符。
rewrite
(可选,字符串)用于重写查询的方法。有关有效值和更多信息,请参阅 rewrite 参数
case_insensitive [7.10.0] 在 7.10.0 中添加。
(可选,布尔值)当设置为 true 时,允许对值与索引字段值进行 ASCII 不区分大小写的匹配。默认值为 false,这意味着匹配的大小写敏感性取决于底层字段的映射。

说明

编辑

简短请求示例

编辑

您可以通过组合 <field>value 参数来简化 prefix 查询语法。例如

resp = client.search(
    query={
        "prefix": {
            "user": "ki"
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      prefix: {
        user: 'ki'
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    prefix: {
      user: "ki",
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "prefix" : { "user" : "ki" }
  }
}

加速前缀查询

编辑

您可以使用 index_prefixes 映射参数来加速前缀查询。如果启用,Elasticsearch 会根据配置设置在单独的字段中索引前缀。这使 Elasticsearch 可以更有效地运行前缀查询,但代价是索引更大。

允许昂贵的查询

编辑

如果 search.allow_expensive_queries 设置为 false,则不会执行前缀查询。但是,如果启用了 index_prefixes,则会构建一个优化的查询,该查询不被认为是慢速的,并且尽管有此设置,仍会执行。