我已经尝试了很长一段时间但却看不到问题。如果在ES方面有更多经验的人能够向我提出正确的方向,我将非常高兴。我有一个父类型(学院)和一个孩子类型(课程)。课程有3级嵌套聚合(Subjectgroup)。现在,我试图展示有多少学院提供课程与学院查询中的个别学科组。
这是我的映射:
indexes:
studiengaenge:
index_name: studiengaenge_dev
settings:
index:
analysis:
analyzer:
lc_term:
type: custom
tokenizer: keyword
filter: lowercase
types:
college:
mappings:
id: ~
course:
mappings:
id: ~
name: ~
subjectgroups:
type: "nested"
properties:
name: { "type": "string", "index": "analyzed", "analyzer": "lc_term" }
area:
type: "nested"
properties:
name: { "type": "string", "index": "analyzed", "analyzer": "lc_term" }
field:
type: "nested"
properties:
name: { "type": "string", "index": "analyzed", "analyzer": "lc_term" }
_parent:
type: "college"
查询:
GET college/_search?search_type=count
{
"query": {
"has_child": {
"type": "course",
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "subjectgroups",
"filter": {
"terms": {
"subjectgroups.name": [
"lehramt"
]
}
}
}
}
]
}
}
}
}
}
},
"aggs": {
"children": {
"children": {
"type": "course"
},
"aggs": {
"fachgruppen": {
"nested": {
"path": "course.subjectgroups"
},
"aggs": {
"filtered": {
"filter": {
"terms": {
"subjectgroups.name": [
"lehramt"
]
}
},
"aggs": {
"fachgruppe": {
"terms": {
"field": "subjectgroups.name"
},
"aggs": {
"reverse_nested": {
"reverse_nested": {},
"aggs": {
"doc_count_college": {
"cardinality": {
"field": "_parent"
}
}
}
},
"studienbereich": {
"nested": {
"path": "course.subjectgroups.area"
},
"aggs": {
"studienbereich": {
"terms": {
"field": "subjectgroups.area.name"
},
"aggs": {
"reverse_nested": {
"reverse_nested": {},
"aggs": {
"doc_count_college": {
"cardinality": {
"field": "_parent"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
结果:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 123,
"max_score": 0,
"hits": []
},
"aggregations": {
"children": {
"doc_count": 12289,
"fachgruppen": {
"doc_count": 15029,
"filtered": {
"doc_count": 4582,
"fachgruppe": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "lehramt",
"doc_count": 4582,
"reverse_nested": {
"doc_count": 3786,
"doc_count_college": {
"value": 124
}
},
"studienbereich": {
"doc_count": 4582,
"studienbereich": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "schulische fächer",
"doc_count": 3938,
"reverse_nested": {
"doc_count": 3399,
"doc_count_college": {
"value": 130
}
}
},
{
"key": "berufliche fachrichtungen",
"doc_count": 357,
"reverse_nested": {
"doc_count": 315,
"doc_count_college": {
"value": 105
}
}
},
{
"key": "sonderpädagogik, inklusive pädagogik",
"doc_count": 287,
"reverse_nested": {
"doc_count": 287,
"doc_count_college": {
"value": 32
}
}
}
]
}
}
}
]
}
}
}
}
}
}
问题在于,即使只有123个结果(大学),第二级学科组的聚合告诉我,有130个学院“关键”:“schulischefächer”。 任何帮助是极大的赞赏。谢谢,Hannes
答案 0 :(得分:0)
在这种情况下的问题是弹性搜索在聚合计数上不一定是精确的。如果它认为聚合的结果不会受到此特定分片可能返回的结果的极大影响,则Elasticsearch可能会完全忽略分片。
这将仅导致聚合的近似结果。尝试以一种只有一个数据分片的方式设置索引参数。然后结果可能会有所不同,也可能是准确的。然而,这不是一个解决方案,因为如果您有大量数据,则需要将其分布在不同的分片上。
当涉及聚合和其他操作时,弹性搜索的这种属性是无可比拟的速度的缺点。