美文网首页公众号:阿区先生
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