store编辑

默认情况下,字段值会被索引以便进行搜索,但不会被*存储*。这意味着可以查询该字段,但无法检索原始字段值。

通常情况下,这并不重要。字段值已经是_source 字段的一部分,而该字段默认情况下会被存储。如果您只想检索单个字段或少数几个字段的值,而不是整个 _source,则可以使用源过滤来实现。

在某些情况下,store 一个字段是有意义的。例如,如果您有一个包含 titledate 和非常大的 content 字段的文档,您可能只想检索 titledate,而无需从大型 _source 字段中提取这些字段。

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        title: {
          type: 'text',
          store: true
        },
        date: {
          type: 'date',
          store: true
        },
        content: {
          type: 'text'
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    title: 'Some short title',
    date: '2015-01-01',
    content: 'A very long content field...'
  }
)
puts response

response = client.search(
  index: 'my-index-000001',
  body: {
    stored_fields: [
      'title',
      'date'
    ]
  }
)
puts response
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "store": true 
      },
      "date": {
        "type": "date",
        "store": true 
      },
      "content": {
        "type": "text"
      }
    }
  }
}

PUT my-index-000001/_doc/1
{
  "title":   "Some short title",
  "date":    "2015-01-01",
  "content": "A very long content field..."
}

GET my-index-000001/_search
{
  "stored_fields": [ "title", "date" ] 
}

titledate 字段会被存储。

此请求将检索 titledate 字段的值。

存储的字段以数组形式返回

为了保持一致性,存储的字段始终以*数组*形式返回,因为无法知道原始字段值是单个值、多个值还是空数组。

如果您需要原始值,则应从 _source 字段中检索它。