2016-04-28 26 views
1

elasticsearchを使い始める前に、ページ設定とともに1つのクエリでこれが可能であるかどうかは不明です。私は2種類のインデックスを持っています: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" 
     } 
    } 
} 

予想される(擬似)結果:たとえばここauthor_post_count

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

は、ユーザーが作成したblog投稿数です。それはカウントの代わりにそれらのブログの投稿を返すことができればそれも素晴らしいだろう。これは可能ですか?多分私は正しい言葉を使っていませんが、私の質問がはっきりしていることを願っています。

+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はあなたのために働いたのですか? –

関連する問題