2014-12-23 194 views
2

我想弄清楚如何做這個例子。比方說,我有3個文件結構如下:沒有嵌套文檔的文檔數

{ 
    "name": "test one", 
    "images": [ 
     { 
      "id": 1 
     } 
    ] 
} 


{ 
    "name": "test two", 
    "images": [] 
} 


{ 
    "name": "test three", 
    "images": [ 
     { 
      "id": 2 
     } 
    ] 
} 

我想要麼得到的文件計數與該images對象(在這種情況下是2),或(較不優選)文件數對象在images字段(在本例中爲1)。這是爲了聚合查詢之一,萬一這不明顯。我試着約100種不同的聚合類型,包括這個

... 
"withoutPhotos": { 
    "nested": { 
    "path": "images" 
    }, 
    "aggs": { 
    "noPhoto": { 
     "missing": { 
     "field": "images.id" 
     } 
    } 
    } 
} 

此,

... 
"withoutPhotos": { 
    "missing": { 
    "field": "images" 
    } 
} 

和他人的豐富性。有任何想法嗎?

回答

0

這裏有一個查詢返回缺少images.id場的結果(看起來非常相似,你的):

curl -XGET 'http://localhost:9200/index/test/_search?search_type=count&pretty' -d ' 
> { "query" :{ 
> "match_all": { } 
> }, 
> "aggs": { 
>  "noPhoto": { "missing": {"field": "images.id"} } 
> } 
> }' 
{ 
    "took" : 4, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 3, 
    "max_score" : 0.0, 
    "hits" : [ ] 
    }, 
    "aggregations" : { 
    "noPhoto" : { 
     "doc_count" : 1 
    } 
    } 
} 

這裏有一個查詢返回的實例數images.id - 不能完全肯定如果這是你想要的(它返回一個字段數而不是文件數)。

[email protected]:~$ curl -XGET 'http://localhost:9200/index/test/_search?search_type=count&pretty' -d ' 
> { "query" :{ 
> "match_all": { } 
> }, 
> "aggs": { 
> "images_count" : { "value_count" : { "field" : "images.id" } } 
> } 
> }' 
{ 
    "took" : 4, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 3, 
    "max_score" : 0.0, 
    "hits" : [ ] 
    }, 
    "aggregations" : { 
    "images_count" : { 
     "value" : 2 
    } 
    } 
} 

其他選項是將某些東西放在查找「images.id」的查詢中 - 例如,通配符。

0

我會建議這種方法。

curl -XGET 'http://localhost:9200/test/test/_search?search_type=count&pretty' -d ' 
{ "query" :{ 
    "match_all": { } 
    }, 
    "aggs": { 
    "noImage": { "missing": {"field": "images.id"} } 
    } 
}' 

結果

{ 
    "took" : 4, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 3, 
    "max_score" : 0.0, 
    "hits" : [ ] 
    }, 
    "aggregations" : { 
    "noImage" : { 
     "doc_count" : 1 
    } 
    } 
} 

這裏hits.total將在該索引的文檔總數。 aggregations.noImage.doc_count是不具有圖像的文檔數量。 因此具有圖像場的文檔的數量將是hits.total - aggregations.noImage.doc_count

  1. 文檔具有圖像= hits.total - aggregations.noImage.doc_count
  2. 文檔不具有圖像= aggregations.noImage.doc_count