1

次のようなドキュメントでエラスティック検索を実行しています。

{
  id: 1,
  price: 620000,
  propertyType: "HO",
  location: {
    lat: 51.41999,
    lon: -0.14426
  },
  active: true,
  rentOrSale: "S",
}

集計を使用して特定の領域に関する統計を取得しようとしていますが、使用しているクエリは次のとおりです。

{
  "sort": [
    {
      "id": "desc"
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "rentOrSale": "s"
          }
        },
        {
          "term": {
            "active": true
          }
        }
      ]
    },
    "filtered": {
      "filter": {
        "and": [
          {
            "geo_distance": {
              "distance": "15.0mi",
              "location": {
                "lat": 51.50735,
                "lon": -0.12776
              }
            }
          }
        ]
      }
    }
  },
  "aggs": {
    "propertytype_agg": {
      "terms": {
        "field": "propertyType"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    },
    "bed_agg": {
      "terms": {
        "field": "numberOfBedrooms"
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

しかし、結果には集計が表示されません。クエリのブール部分またはフィルター処理された部分を削除するとすぐに、集計が表示されます。なぜこれが起こっているのか、これらのフィルターの集計を取得する方法がわかりません。この質問への回答を使用してみましたが、解決できませんでした。何か案は?

4

1 に答える 1

1

クエリを少し再配置する必要があると思います-「フィルター処理済み」をさらに上に移動し、「クエリ」コマンドを繰り返します。

"query": {
  "filtered": {
   "query" : {
     "bool": {
          ...
     }
   },  
   "filter": {
    ...     
    }
  }
}
于 2014-12-21T12:32:00.363 に答える