elasticsearch 如何使Elasticsearch聚合只创建一个bucket?,elasticsearch,postman,kibana,elasticsearch,Postman,Kibana" /> elasticsearch 如何使Elasticsearch聚合只创建一个bucket?,elasticsearch,postman,kibana,elasticsearch,Postman,Kibana" />

elasticsearch 如何使Elasticsearch聚合只创建一个bucket?

elasticsearch 如何使Elasticsearch聚合只创建一个bucket?,elasticsearch,postman,kibana,elasticsearch,Postman,Kibana,我有一个Elasticsearch索引,其中包含一个名为“主机”的字段。我试图向Elasticsearch发送一个查询,以获取索引中主机的所有唯一值的列表。这是目前我能得到的最接近的结果: { "size": 0, "aggs": { "hosts": { "terms": {"field": "host"} } } } 返回: "buckets": [ { "key": "04",

我有一个Elasticsearch索引,其中包含一个名为“主机”的字段。我试图向Elasticsearch发送一个查询,以获取索引中主机的所有唯一值的列表。这是目前我能得到的最接近的结果:

{
"size": 0,
"aggs": {
    "hosts": {
        "terms": {"field": "host"}
        }
    }
}
返回:

"buckets": [
            {
                "key": "04",
                "doc_count": 201
            },
            {
                "key": "cyn",
                "doc_count": 201
            },
            {
                "key": "pc",
                "doc_count": 201
            }
        ]
但是,主机的实际名称是04-cyn-pc。我的理解是,它正在将它们拆分为关键字,因此我尝试以下方式:

{
"properties": {
    "host": {
        "type": "text",

        "fields": {
            "raw": {
                "type": "text",
                "analyzer": "keyword",
                "fielddata": true
                }
            }
        }
    }
}
但它返回非法参数\u exception
“reason:“[host.raw]的映射器与其他类型中的现有映射冲突:\n[Mapper[host.raw]具有不同的[index]值,而映射器[host.raw]具有不同的[analyzer]]”

正如你可能知道的,我对Elasticsearch非常陌生,任何帮助或指导都会很棒,谢谢

试试这个:

{
"properties": {
    "host": {
        "type": "text",
        "fields": {
            "raw": {
                "type": "keyword"
                }
            }
        }
    }
}
请尝试以下方法:

{
"properties": {
    "host": {
        "type": "text",
        "fields": {
            "raw": {
                "type": "keyword"
                }
            }
        }
    }
}

如果不指定映射,弹性会自动将字符串字段索引为文本和关键字类型。在您的示例中,如果您不希望对字段进行全文搜索分析,则应该将该字段的类型定义为关键字。所以,您可以摆脱分析文本字段的负担。通过下面的映射,您可以轻松解决问题,而无需更改agg查询

"properties": {
  "host": {
    "type": "keyword"
    }
}

如果不指定映射,弹性会自动将字符串字段索引为文本和关键字类型。在您的示例中,如果您不希望对字段进行全文搜索分析,则应该将该字段的类型定义为关键字。所以,您可以摆脱分析文本字段的负担。通过下面的映射,您可以轻松解决问题,而无需更改agg查询

"properties": {
  "host": {
    "type": "keyword"
    }
}

很好,这在搜索host.raw字段后有效。非常感谢。很好,这在搜索host.raw字段后有效。非常感谢。