14.Elasticsearch 7.15 Query DSL 之 IDs查询、Exists查询和Prefix查询

ids查询

介绍

根据 ID 返回文档。此查询使用存储在 _id 字段中的文档 ID
例如:

GET /_search
{
  "query": {
    "ids" : {
      "values" : ["1", "4", "100"]
    }
  }
}

ids的顶级参数

values (必填, 字符串数组) 文档的_id的数组.

Exists查询

介绍

返回某个字段包含索引值的文档

由于多种原因,文档字段可能不存在索引值:

  • 字段在_source字段中的JSON 中是 null 或 []
  • 字段在索引mapping中设置为"index" : false
  • 字段值的长度超过了mapping中的ignore_above设置
  • 字段值格式错误,并且在mapping中定义了 ignore_malformed

例如,以下查询返回user字段不为空的文档。

GET /_search
{
  "query": {
    "exists": {
      "field": "user"
    }
  }
}

如何查询一个某字段不存在值的文档呢,例如:

GET /_search
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "user.id"
        }
      }
    }
  }
}

exists的顶级参数

field (必填, string) 你想查询的字段名.

如果 JSON 值为 null 或 [],则认为某个字段不存在,但以下值将表明该字段存在:

  • 空字符串, 如,"" or “-”
  • 数组包含null或者其他值,如: [null, “foo”]
  • 一个自定义的null-value, 在mapping中定义的

prefix查询

介绍

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

例如,以下搜索返回 user.id 字段包含以 ki 开头的文档:

GET /_search
{
  "query": {
    "prefix": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}

prefix的顶级参数

(Required, object) 你希望查询的字段名.

field的二级参数

参数名描述
value(必需,字符串)您希望在提供的 中找到的开头字符
rewrite(可选,字符串)用于重写查询的方法。有关有效值和更多信息,请参阅 rewrite 参数。
case_insensitive [从7.10.0版本添加](可选,布尔值)当设置为 true 时,允许将值与索引字段值进行不区分大小写的匹配。默认为 false,这意味着匹配的区分大小写取决于基础字段的映射。

prefix的简写

当只有value参数时,可以简写为:

GET /_search
{
  "query": {
    "prefix": {
      "user.id": "ki"
    }
  }
}

prefix查询提速

你可以使用index_prefixes mapping参数来加速查询。如果启用,Elasticsearch 会在单独的字段中索引 2 到 5 个字符之间的前缀。这让 Elasticsearch 以更大的索引为代价更高效地运行prefix查询。

例如,定义mapping时开启了index_prefixes参数:

# min_chars 索引的最小前缀长度。必须大于 0,默认为 2
# max_chars 索引的最大前缀长度。必须小于 20,默认为 5
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "full_name": {
        "type": "text",
        "index_prefixes": {
          "min_chars" : 1,
          "max_chars" : 10
        }
      }
    }
  }
}

prefix查询的限制

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值