ElasticSearch - 嵌套对象的字段名称中的点

时间:2014-02-12 21:00:48

标签: elasticsearch

我有这种形式的数据:

{
  "workers": {
    "worker.1": {
      "jobs": 1234
    }, 
  }, 
  "total_jobs": 1234
}

我正在尝试处理字段名称中的“点”。我试过这个映射:

{
  "worker_stats": {
    "properties": {
      "workers": {
        "type": "object", 
        "properties": {
          "worker.1": {
            "type": "nested", 
            "index_name": "worker_1", 
            "properties": {
              "jobs": {
                "type": "integer"
              }
            }
          }
        }
      }, 
      "total_jobs": {
        "type": "integer"
      }
    }
  }
}

但是当我获取我的映射时,index_name是无处可见的,当我添加文档时,它仍然有点。

最终,我只是想做一些聚合:

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      }
    }
  }, 
  "aggs": {
    "worker1_stats": {
      "aggs": {
        "stats": {
          "stats": {
            "field": "workers.worker.1.jobs"
          }
        }
      }, 
      "nested": {
        "path": "workers.worker.1"
      }
    }
  }
}

但是点干扰了。

我该怎么做才能处理这个点?有没有办法使用script代替field? (我对nested的使用是否正确?

1 个答案:

答案 0 :(得分:0)

我认为您可以在映射中使用index_namepathtype : object来更改索引期间该字段的名称。

以下是我的例子:

PUT /twitter/
{
    "settings" : {
        "number_of_shards" : 5,
        "number_of_replicas" : 0
    },
    "mappings": {
        "tweet":{
            "properties": {
                "desc.youbet":{"type":"object","path":"just_name",
                "properties": {
                    "one": {
                    "type": "integer", "index_name":"one"
                    }
                }
                }
            }
        }
    }
}

PUT /twitter/tweet/1 
{
    "name":"chicken",
    "desc.youbet":{
        "one":1,
    }
}

PUT /twitter/tweet/2 
{
    "name":"chicken",
    "desc.youbet":{
        "one":1,
    }
}

您现在可以使用desc对文档中的操作进行操作并搜索文档中的内容,以便:

POST /twitter/tweet/_search
{
    "query": {"match_all": {}},
    "aggs":{
        "stats": {
          "stats": {"field": "one"}
        }
    }, "size":0
}

结果如下:

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "stats": {
         "count": 2,
         "min": 1,
         "max": 1,
         "avg": 1,
         "sum": 2
      }
   }
}