我无法在Elasticsearch v6.8.0中使用match_phrase_prefix
来限制嵌套聚合查询的结果
我可以使用match_phrase_prefix
来限制非嵌套聚合的结果。我希望能够将相同的逻辑应用于嵌套字段,如下所示。索引映射正确地将嵌套的字段类型列出为嵌套的,并且我能够成功地聚集字段而没有任何过滤器(使用match_all
)。
成功非嵌套字段汇总,并带有match_phrase_prefix
查询:
GET index/_search
{
"query":{
"match_phrase_prefix": {
"field1": "Nurse"
}
},
"size":0,
"aggs":{
"field1":{
"terms":{
"field":"field1",
"size":100,
"order":{
"_count": "desc"
}
}
}
}
}
成功的嵌套字段聚合(没有match_phrase_prefix
):
GET index/_search
{
"query":{
"match_all": {}
},
"size":0,
"aggs":{
"field2":{
"nested":{
"path":"field2"
},
"aggs":{
"field2.nestedField":{
"terms":{
"field":"field2.nestedField",
"size":100,
"order":{
"_count": "desc"
}
}
}
}
}
}
}
不成功与match_phrase_prefix
的嵌套字段聚合:
GET index/_search
{
"query":{
"match_phrase_prefix": {
"field2.nestedField": "en"
}
},
"size":0,
"aggs":{
"field2":{
"nested":{
"path":"field2"
},
"aggs":{
"field2.nestedField":{
"terms":{
"field":"field2.nestedField",
"size":100,
"order":{
"_count": "desc"
}
}
}
}
}
}
}
第三个查询的预期输出是存储桶列表,其键与前缀过滤器匹配。相反,我看到的结果列表为空。有没有一种结构match_phrase_prefix
来处理嵌套字段的方法?还是在术语级别应用过滤器的方法?
答案 0 :(得分:0)
使用嵌套的顶级查询解决了此问题。
有关有效的解决方案,请参见以下问题(使用terms
而不是prefix
过滤器):
Elasticsearch - How to filter nested aggregation bucket?
示例:
GET index/_search
{
"query":{
"nested":{
"path":"field2",
"query":{
"match_phrase_prefix":{
"field2.nestedField":"en"
}
}
}
},
"size":0,
"aggs":{
"field2":{
"nested":{
"path":"field2"
},
"aggs":{
"innerFilter":{
"filter":{
"prefix":{
"field2.nestedField":"en"
}
},
"aggs":{
"field2.nestedField":{
"terms":{
"field":"field2.nestedField",
"size":100,
"order":{
"_count":"desc"
}
}
}
}
}
}
}
}
}
答案 1 :(得分:0)
您需要为此使用嵌套查询(文档here)
此查询
“查询”:{ “ match_phrase_prefix”:{ “ field2.nestedField”:“ en” } }
不返回任何内容,因为您的索引文档不包含nestedField
字段。此字段属于嵌套文档。
正确的查询是:
GET index/_search
{
"query": {
"nested": {
"path": "field2",
"query": {
"match_phrase_prefix": {
"field2.nestedField": "en"
}
}
}
},
"size": 0,
"aggs": {
"field2": {
"nested": {
"path": "field2"
},
"aggs": {
"field2.nestedField": {
"terms": {
"field": "field2.nestedField",
"size": 100,
"order": {
"_count": "desc"
}
}
}
}
}
}
}