2017-05-17 11 views
2

私は弾性検索が初めてで、データを初めて索引付けして検索します。下の弾性検索クエリの結果がfalse

私は、インデックス内の用語の数を見つけるために、このコードを書いた:

{ 
    { 
    "size": 0 
    }, 
    "aggs": { 
    "BookID": { 
     "terms": { 
     "field": "bookID", 
     "size": 100000 
     }, 
     "aggs": { 
     "total_Chapter": { 
      "nested": { 
      "path": "chapterData" 
      }, 
      "aggs": { 
      "termsInChapter": { 
       "filters": { 
       "filters": { 
        "king": { 
        "query_string": { 
         "query": "king", 
         "default_field": "chapter.data" 
        } 
        }, 
        "queen": { 
        "query_string": { 
         "query": "queen", 
         "default_field": "chapter.data" 
        } 
        }, 
        "apple": { 
        "query_string": { 
         "query": "apple", 
         "default_field": "chapter.data" 
        } 
        } 
       } 
       } 
      }, 
      "termsInChapter_count": { 
       "value_count": { 
       "field": "termsInChapter" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

しかし、何とか結果は、私がこのクエリで間違っていたかわからない0を返しています。任意の助けを事前に

"aggregations": { 
    "BookID": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
     { 
      "key": 1, 
      "doc_count": 1, 
      "total_Chapter": { 
      "doc_count": 23, 
      "termsInChapter": { 
       "buckets": { 
       "apple": { 
        "doc_count": 2 
       }, 
       "king": { 
        "doc_count": 1 
       }, 
       "queen": { 
        "doc_count": 1 
       } 
       } 
      }, 
      "termsInChapter_count": { 
       "value": 0    <=========This should return 3 
      } 
      } 
     }, 
     { 
      "key": 2, 
      "doc_count": 1, 
      "total_Chapter": { 
      "doc_count": 23, 
      "termsInChapter": { 
       "buckets": { 
       "apple": { 
        "doc_count": 0 
       }, 
       "king": { 
        "doc_count": 3 
       }, 
       "queen": { 
        "doc_count": 2 
       } 
       } 
      }, 
      "termsInChapter_count": { 
       "value": 0 
      } 
      } 
     }, 

ありがとう:ここ

は、このクエリの出力の一部です。

答えて

1

まずはAndrei Stefanのおかげです。

私は直接この質問に答えるので、誰もコメントやすべてを通らずに直接答えを得ることができます。

this答えを見ると、私はbucket_scriptをより高いレベルに配置する必要があることを発見しました。だから私は少し前回の回答からあなたのクエリを変更し、それは働いた。ここで

最終作業クエリです:

"aggs": { 
    "total_Chapter": { 
    "nested": { 
     "path": "chapterData" 
    }, 
    "aggs": { 
     "termsInChapter": { 
     "filters": { 
      "filters": { 
      "king": { 
       "query_string": { 
       "query": "king", 
       "default_field": "chapter.data" 
       } 
      }, 
      "queen": { 
       "query_string": { 
       "query": "queen", 
       "default_field": "chapter.data" 
       } 
      }, 
      "apple": { 
       "query_string": { 
       "query": "apple", 
       "default_field": "chapter.data" 
       } 
      } 
      } 
     }, 
     "aggs": { 
      "filter_zero_matches_buckets": { 
      "bucket_selector": { 
       "buckets_path": { 
       "hits": "_count" 
       }, 
       "script": "params.hits > 0" 
      } 
      } 
     } 
     } 
    } 
    }, 
    "termsInChapter_count": { 
    "bucket_script": { 
     "buckets_path": { 
     "bucket_count": "total_Chapter>termsInChapter._bucket_count" 
     }, 
     "script": "params.bucket_count" 
    } 
    } 
} 

おかげで再びAndrei。 :)

+0

私のテストを簡略化するために、私は'ネスト 'データ構造でテストしませんでした。 –

2

termsInChapter_countアグリゲーションは、集計名ではなくフィールドを参照する必要があります。そのため、ソリューションは機能しません。

あなたは集計のsum_bucket種類必要とするが機能するために:あなたは結果に探しているものを

"termsInChapter_count": { 
    "sum_bucket": { 
    "buckets_path": "termsInChapter._count" 
    } 
} 

LATER EDIT

"aggs": { 
    "termsInChapter": { 
     "filters": { 
     "filters": { 
      "king": { 
      "query_string": { 
       "query": "king", 
       "default_field": "chapter.data" 
      } 
      }, 
      "queen": { 
      "query_string": { 
       "query": "queen", 
       "default_field": "chapter.data" 
      } 
      }, 
      "apple": { 
      "query_string": { 
       "query": "apple", 
       "default_field": "chapter.data" 
      } 
      } 
     } 
     }, 
     "aggs": { 
     "filter_zero_matches_buckets": { 
      "bucket_selector": { 
      "buckets_path": { 
       "hits": "_count" 
      }, 
      "script": "params.hits > 0" 
      } 
     } 
     } 
    }, 
    "termsInChapter_count": { 
     "bucket_script": { 
     "buckets_path": { 
      "bucket_count": "termsInChapter._bucket_count" 
     }, 
     "script": "params.bucket_count" 
     } 
    } 
    } 

termsInChapter_count値です。

+0

これは、すべてのバケットからのカウントの合計を返します。私が望むのは、一致した用語の数であり、一致した用語の数の和ではありません。 – Callisto

+0

どうすればいいですか? – Callisto

+0

私はフォローしていません。あなたはバケツの数が欲しいですか? –

関連する問題