我们正在使用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
包含/排除只是一个操作该字段内的字符串数据的后处理操作,对吗?
我知道我们也可以使用源过滤来请求在查询时不包含特定字段,但是根本不需要存储它。如果有的话,我只想理解为什么这不起作用:)。