如果我在Elasticsearch中禁用了_source和_all,我可以获得一个字段吗?

时间:2016-01-21 07:57:42

标签: elasticsearch

在我的案例中,

Elasticsearch suggested为可拒绝的_source_all字段,这是我的映射

{
  "template": "mq-body-*",
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 0,
    "max_result_window": 100,
    "codec": "best_compression"
  },
  "mappings": {
    "_default_": {
      "_source": {
        "enabled": false
      },
      "_all": {
        "enabled": false
      }
    },
    "body": {
      "properties": {
        "body": {
          "type": "string",
          "doc_values": true,
          "index": "not_analyzed"
        }
      }
    }
  }
}

body.body是一个非常大的领域(20k-300k),我们不需要索引和罕见的,这是丢失的。但是之后

PUT /mq-body-local/body/1
{"body":"My body"}

我无法通过GET /mq-body-local/body/1?fields=bodyPOST /mq-body-local/body/_search -d'{"fields":["body"]}'查找正文,结果是找到一个但没有文档。我知道没有_source我做不到{{} 1}}或get,但我怎样才能检索我的文件?

1 个答案:

答案 0 :(得分:3)

来自Elasticsearch的网站:

  

_source字段包含原始的JSON文档正文   在索引时间通过。 _source字段本身没有索引(和   因此是不可搜索的),但它被存储以便可以返回   执行获取请求时,如获取或搜索

禁用源将阻止Elasticsearch在结果集中显示它。但是,过滤,查询和聚合不会受到影响。

因此,这两个查询不会根据实际正文产生任何结果:

GET mq-body-local/body/1

POST mq-body-local/body/_search { "aggs": { "test": { "terms": { "field": "body" } } } }

但是,您可以运行包含某些源的聚合,例如:

"aggregations": {
    "test": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "my body",
          "doc_count": 1
        },
        {
          "key": "my body2",
          "doc_count": 1
        }
      ]
    }
  }

会产生这个结果集(我已经创建了一些测试记录):

{{1}}