目录
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仍会执行。