布尔字段类型编辑

布尔字段接受 JSON truefalse 值,但也可以接受被解释为真或假的字符串。

假值

false, "false", "" (空字符串)

真值

true, "true"

例如

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        is_published: {
          type: 'boolean'
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 1,
  refresh: true,
  body: {
    is_published: 'true'
  }
)
puts response

response = client.search(
  index: 'my-index-000001',
  body: {
    query: {
      term: {
        is_published: true
      }
    }
  }
)
puts response
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "is_published": {
        "type": "boolean"
      }
    }
  }
}

POST my-index-000001/_doc/1?refresh
{
  "is_published": "true" 
}

GET my-index-000001/_search
{
  "query": {
    "term": {
      "is_published": true 
    }
  }
}

索引一个包含 "true" 的文档,它被解释为 true

搜索包含 JSON true 的文档。

terms 聚合 这样的聚合使用 10 作为 key,以及字符串 "true""false" 作为 key_as_string。在脚本中使用时,布尔字段返回 truefalse

response = client.index(
  index: 'my-index-000001',
  id: 1,
  refresh: true,
  body: {
    is_published: true
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 2,
  refresh: true,
  body: {
    is_published: false
  }
)
puts response

response = client.search(
  index: 'my-index-000001',
  body: {
    aggregations: {
      publish_state: {
        terms: {
          field: 'is_published'
        }
      }
    },
    sort: [
      'is_published'
    ],
    fields: [
      {
        field: 'weight'
      }
    ],
    runtime_mappings: {
      weight: {
        type: 'long',
        script: "emit(doc['is_published'].value ? 10 : 0)"
      }
    }
  }
)
puts response
POST my-index-000001/_doc/1?refresh
{
  "is_published": true
}

POST my-index-000001/_doc/2?refresh
{
  "is_published": false
}

GET my-index-000001/_search
{
  "aggs": {
    "publish_state": {
      "terms": {
        "field": "is_published"
      }
    }
  },
  "sort": [ "is_published" ],
  "fields": [
    {"field": "weight"}
  ],
  "runtime_mappings": {
    "weight": {
      "type": "long",
      "script": "emit(doc['is_published'].value ? 10 : 0)"
    }
  }
}

boolean 字段的参数编辑

以下参数被 boolean 字段接受。

doc_values

字段是否应该以列跨度的方式存储在磁盘上,以便以后用于排序、聚合或脚本?接受 true (默认) 或 false

index

字段是否应该快速可搜索?接受 true (默认) 和 false。只有 doc_values 启用的字段仍然可以使用术语或基于范围的查询进行查询,尽管速度较慢。

ignore_malformed

尝试将错误的数据类型索引到字段中默认情况下会抛出异常,并拒绝整个文档。如果此参数设置为 true,则允许忽略异常。格式错误的字段不会被索引,但文档中的其他字段会正常处理。接受 truefalse。请注意,如果使用 script 参数,则无法设置此参数。

null_value

接受上面列出的任何真值或假值。该值将替换任何显式的 null 值。默认为 null,这意味着该字段被视为缺失。请注意,如果使用 script 参数,则无法设置此参数。

on_script_error

定义如果由 script 参数定义的脚本在索引时抛出错误该怎么办。接受 fail (默认),这将导致整个文档被拒绝,以及 continue,这将注册文档的 _ignored 元数据字段中的字段,并继续索引。此参数只能在也设置了 script 字段的情况下设置。

script

如果设置了此参数,则该字段将索引由该脚本生成的的值,而不是直接从源读取值。如果在输入文档上为该字段设置了值,则该文档将被拒绝并出现错误。脚本的格式与其 运行时等效项 相同。

store

字段值是否应该与 _source 字段分开存储和检索。接受 truefalse (默认)。

meta

有关字段的元数据。

合成 _source编辑

合成 _source 仅对 TSDB 索引(具有 index.mode 设置为 time_series 的索引)普遍可用。对于其他索引,合成 _source 处于技术预览阶段。技术预览中的功能可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。

boolean 字段在其默认配置中支持 合成 _source。合成 _source 不能与 copy_to 或禁用 doc_values 一起使用。

合成源始终对 boolean 字段进行排序。例如

response = client.indices.create(
  index: 'idx',
  body: {
    mappings: {
      _source: {
        mode: 'synthetic'
      },
      properties: {
        bool: {
          type: 'boolean'
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'idx',
  id: 1,
  body: {
    bool: [
      true,
      false,
      true,
      false
    ]
  }
)
puts response
PUT idx
{
  "mappings": {
    "_source": { "mode": "synthetic" },
    "properties": {
      "bool": { "type": "boolean" }
    }
  }
}
PUT idx/_doc/1
{
  "bool": [true, false, true, false]
}

将变成

{
  "bool": [false, false, true, true]
}