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