公众号:阿区先生

Elasticsearch基础之_source字段

2020-10-14  本文已影响0人  猩球驿站

定义

该字段是mapping里的一个元数据字段,本意在索引阶段是否保留原文本的字段内容,可以指定截取多个字段的内容。

字段设置意义

在type的mapping中配置形式如下:

{
  "mappings": {
    "_doc" : {
    "_source": {
      "excludes" : ["file"],
      "includes" : []
    },
    "properties" : {
        "file" :{ 
          "type" : "text"
        }
    }
  }
}

在索引数据后,获取数据,可以发现返回如下格式数据,重点关注_source字段里面的json为空。

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total":  1,,
    "max_score": 1,
    "hits": [
      {
        "_index": "my-index",
        "_type" : "_doc",
        "_id": "1",
        "_score": 1,
        "_source": {}
       }
    ]
  }
}

字段禁用的影响

禁用的目的是为了节省空间,如果不是特别需要可以考虑使用压缩的方式。因此强烈建议该配置打开。

推荐使用方法

正如上文提到的,禁用字段的_source,会引发一系列问题,尤其影响后续的数据迁移(reindex接口)。建议不要禁用该字段,为了实现:

如确实考虑到节省磁盘资源,可以开压缩。需要返回部分字段内容可采用source字段过滤方式。
source过滤
在search时指定_source配置,指定需要过滤的字段,支持正则表达式,很常见的使用方式,并且很方便。
如下面搜索方式即可包含f1,f2开头的字段,并且过滤以f3命名结尾的字段

GET /_search
{
  "_source": {
    "includes": [ "f1*", "f2*" ],
    "excludes": [ "*f3" ]
  },
  "query": {
    "match": {
      "file: "hello world"
    }
  }
}

不足:

elasticsearch可通过doc value fields、stored fields以及script fields等的配置方式来解决以上的不足,这些方式不在本文的讨论范围。

上一篇 下一篇

猜你喜欢

热点阅读