美文网首页公众号:阿区先生
Elasticsearch基础之_source字段

Elasticsearch基础之_source字段

作者: 猩球驿站 | 来源:发表于2020-10-14 19:16 被阅读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": {}
       }
    ]
  }
}

字段禁用的影响

  • 无法使用update、update_by_query、reindex api接口。
  • 无法进行索引修复
  • 无法修改mappings或者analysis
  • 无法查看源数据内容来调试查询或者聚合接口

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

推荐使用方法

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

  • 节省空间
  • 仅返回所需字段内容

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

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

不足:

  • 不能包含多字段(multi-fields)和字段别名( field aliases)
  • source字段在luncene中是一个字段,存取会将source整个对象加载和解析。

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

相关文章

网友评论

    本文标题:Elasticsearch基础之_source字段

    本文链接:https://www.haomeiwen.com/subject/axnwpktx.html