2016-04-28 180 views
1

elasticsearch入門,不確定這是可能的與一個查詢一起分頁。我有兩種類型的索引:user & blog。實施例的映射:elasticsearch搜索結果與子查詢

"mappings": { 
     "user": { 
     "properties": { 
      "name" : { "type": "string" } 
     } 
     }, 
     "blog": { 
     "properties": { 
      "title" : { "type": "string" }, 
      "author_name" : { "type": "string" } 
     } 
     } 
    } 
} 

樣本數據

用戶:

[ 
    {"name": "jemmy"}, 
    {"name": "Tom"} 
] 

博客:

[ 
    {"title": "foo bar", "author": "jemmy"}, 
    {"title": "magic foo", "author": "Tom"}, 
    {"title": "bigdata for dummies", "author": "Tom"}, 
    {"title": "elasticsearch", "author": "Tom"}, 
    {"title": "JS cookbook", "author": "jemmy"}, 
] 

我想上的索引查詢這樣一種方式,當我搜索對於blog它應該在每場比賽中進行子查詢。例如:

POST /test_index/blog/_search 
{ 
    "query": { 
     "match": { 
      "_all": "foo" 
     } 
    } 
} 

預期(僞)結果:

[ 
    { 
     title: "foo bar", 
     author_name: "Jemmy", 
     author_post_count: 2 
    }, 
    { 
     title: "magic foo", 
     author_name: "Tom", 
     author_post_count: 3 
    } 
] 

這裏author_post_countblog員額數用戶已經撰寫。如果它可以返回這些博客文章,而不是數量太大。這可能嗎?也許這個詞我用得不對,但我希望我的問題很明確。

+0

我不認爲我理解這個要求。你提到了聚合,但我在你的查詢示例中沒有看到這樣的事情。另外,如果你提供一些文檔例子,你想要匹配什麼,以及這些例子的結果應該如何,這可能會更好。 –

+0

@AndreiStefan我已經更新了這個問題。也許聚合在這裏是一個錯誤的術語。此外,查詢示例是匹配部分。我的問題是如何在結果集中填充'author_post_count' – SamSerious

回答

0

嘗試是這樣的:

POST /test_index/blog/_search 
{ 
    "query": { 
    "match": { 
     "_all": "foo" 
    } 
    }, 
    "aggs": { 
    "counting_posts": { 
     "global": {}, 
     "aggs": { 
     "authors": { 
      "terms": { 
      "field": "author", 
      "size": 10 
      } 
     } 
     } 
    } 
    } 
} 

不過要小心與terms聚集,因爲它正在考慮從索引項的實際標記化列表,而不是你實際指數(小寫/大寫字母,符號化的方式或其他)。

+0

@SamSerious是否適合你? –