2016-04-18 14 views
1

私は過去にいくつかのファセットとフィルタベースの検索をSolrで行ってきましたが、私はElasticsearchとのパリティを達成するのに苦労しています。フィルタに基づいた弾性検索集計カウント

私は集計がクエリの結果に対して計算されること、またはクエリが指定されていない場合はグローバルに計算されることを理解します。これは問題ありませんが、の集計のうちはフィルタの結果に基づいています。

Solrではこれは簡単です。クエリとフィルタを指定するだけですが、Elasticsearchではフィルタが集計に影響を与えず、ドキュメントは非常に混乱します。

{ 
    "size": 0, 
    "query": { 
     "range": { 
      "published": { 
       "gte": "now-1y", 
       "lt": "now" 
      } 
     } 
    }, 
    "filter": { 
     { 
      "term": { 
       "tag.id": "123" 
      } 
     }, 
     { 
      "term": { 
       "tag.id": "456" 
      } 
     }, 
    }, 
    "aggs": { 
     "tags": { 
      "nested": { 
       "path": "tag" 
      }, 
      "aggs": { 
       "suggestions": { 
        "terms": { 
         "field": "name", 
         "size": 10, 
         "min_doc_count": 1 
        }, 
        "aggs": { 
         "id": { 
          "terms": { 
           "field": "id", 
           "size": 1 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

および実施例マッピングを与え:以下のクエリの

私の所望の出力は、クエリにスコープされるが、得られるカウントは、その中に指定されたfilterにスコープされるsuggestionsバケットのある

{ 
    "mappings":{ 
     "content":{ 
      "properties":{ 
       "id":{ 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "title":{ 
        "type":"string" 
       }, 
       "byline":{ 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "body":{ 
        "type":"string" 
       }, 
       "publishedDate":{ 
        "type":"date", 
        "format":"dateOptionalTime" 
       }, 
       "tag":{ 
        "type":"nested", 
        "include_in_parent":true, 
        "properties":{ 
         "id":{ 
          "type":"integer" 
         }, 
         "name":{ 
          "type":"string" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

何か助けていただければ幸いです。

+0

[フィルタリングされた集計](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html)を使用しようとしましたか? –

+0

私ははいが、私は期待した結果を得ることができませんでした。私はさらに調査します。 –

+0

私はあなたが何をしようとしているのかよく分かりません。説明できますか? –

答えて

0

あなたがが期待する結果を得ることができます(あなたが持っているもの

  • 、それは、クエリを維持するが、filter一部を移動

    1. は、実際post_filterに相当し、結果のみに適用され集計がfilter集約基本的

    に)実行した後に、この作業をする必要があります:

    { 
        "size": 0, 
        "query": { 
        "range": { 
         "published": { 
         "gte": "now-1y", 
         "lt": "now" 
         } 
        } 
        }, 
        "aggs": { 
        "tags": { 
         "nested": { 
         "path": "tag" 
         }, 
         "aggs": { 
         "suggestions": { 
          "terms": { 
          "field": "tag.name", 
          "size": 10, 
          "min_doc_count": 1 
          }, 
          "aggs": { 
          "filtered": { 
           "filter": { 
           "terms": { 
            "tag.id": [ 
            "123", 
            "456" 
            ] 
           } 
           }, 
           "aggs": { 
           "id": { 
            "terms": { 
            "field": "tag.id", 
            "size": 1 
            } 
           } 
           } 
          } 
          } 
         } 
         } 
        } 
        } 
    } 
    
  • +0

    クール、嬉しい助けて! – Val

    +0

    申し訳ありません...私は少し時期尚早でした!残念ながら、この要求はすべてのカウントが0になります。ネストをフィルタ集約のために元に戻す必要がありますか? –

    +0

    問題を再現できるようにサンプルドキュメントとマッピングを共有できますか? – Val

    関連する問題