从_source中排除字段会导致聚合无效

时间:2015-10-12 14:03:18

标签: elasticsearch source-filter

我们正在使用Elasticsearch 1.7.2并尝试使用"包含/排除_source"这里描述的功能如下:

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html

我们有一个types字段“非常漂亮”。并且我们想要返回给客户但是它不适合聚合,而且字段types_int(以及types_string但现在不相关)和&# #39;丑陋的'但针对我们不希望返回客户端但我们想要聚合/过滤的搜索/聚合进行了优化。

字段types_int不需要存储在任何地方,只需要编入索引。我们也不想浪费带宽将其返还给客户,因此我们不希望将其包含在_source中。

它的映射如下所示:

"types_int": {
  "type": "nested",
  "properties": {
     "name": {
        "type": "string",
        "index": "not_analyzed"
     },
     "value_int": {
        "type": "integer"
     }
  }
}

但是,在我们添加排除后,我们的过滤器/聚合就会停止工作。

排除看起来像这样:

"_source": {
   "excludes": [
      "types_int"
   ]
}

如果没有映射,那么一切正常。

过滤器的一个例子:

POST my_index/my_type/_search
{
   "filter": {
      "nested": {
         "path": "types_int",
         "filter": {
            "term": {
               "types_int.name": "<something>"
            }
         }
      }
   }
}

再一次,删除excludes,一切正常。

认为它可能与嵌套类型有关,因为它们将文档和所有文档分开,并且可能与普通字段的处理方式不同,我为正常的&#39;添加了排除映射。值类型字段,然后我的过滤器停止工作。

 "publication": {
    "type": "string",
    "index": "not_analyzed"
 }

 "_source": {
     "excludes": [
        "publication"
     ]
  }

所以我的结论是,在您从_source中排除某些内容后,您再也无法对其进行过滤了吗?这对我来说没有意义,所以我在想那里我们在这里做错了什么。 _source包含/排除只是一个操作该字段内的字符串数据的后处理操作,对吗?

我知道我们也可以使用源过滤来请求在查询时不包含特定字段,但是根本不需要存储它。如果有的话,我只想理解为什么这不起作用:)。

0 个答案:

没有答案