1

私のサンプル文書は次のようになります。

{
    "user": "dslfjd",
    "productLength": 68,
    "productPrice": 4500,
    "action": "Made Purchse"
}

価格が 4000 ~ 10000 で、長さが 50 ~ 100 の製品を持ってきたすべてのユーザーを取得したいと考えています。次のクエリは、上記の条件を満たすすべてのドキュメントを返します。

{
   "query": {
       "bool": {
           "must": [
               {
                   "term": {
                       "act": "Made Purchase"
                   }
               },
               {
                   "range": {
                       "productPrice": {
                           "gte": 4000,
                           "lte": 10000
                       }
                   }
               },
               {
                   "range": {
                       "length": {
                           "gte": 50,
                           "lte": 100
                       }
                   }
               }
           ]
       }
   }
}

ここでは、上記のクエリ句を満たすすべてのドキュメントを取得します。指定するだけで応答を投影することもできる"_source" = ["user"]ため、ドキュメント全体ではなく、user

代わりに、すべての一意のユーザーのリストが必要です。userフィールドが繰り返される可能性のあるすべてのドキュメントの代わりに。

以下のような集計

{
    "aggs": {
        "unique_users": {
            "terms": {
                "field": "user"
            }
        }
    }
}

すべてのドキュメントを集約しますが、代わりに、任意のクエリを満たすドキュメントの集約が必要です。集計内でクエリを定義するなどの単純なことを見逃しているように感じます。しかし、私はそれが何であるかを知りません。

4

1 に答える 1

2

単純すぎるか、説明したものとは別のものが必要です。

GET /some_index/some_type/_search?search_type=count
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "action": "Made Purchase"
          }
        },
        {
          "range": {
            "productPrice": {
              "gte": 4000,
              "lte": 10000
            }
          }
        },
        {
          "range": {
            "productLength": {
              "gte": 50,
              "lte": 100
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "unique_users": {
      "terms": {
        "field": "user"
      }
    }
  }
}
于 2014-11-28T10:25:09.897 に答える