Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save y-ken/40d99c3a137247ba8eac to your computer and use it in GitHub Desktop.
Save y-ken/40d99c3a137247ba8eac to your computer and use it in GitHub Desktop.
How to do "Pivot Faceting" like Solr-4.0 in elasticsearch-1.1.1 or later version?

次の記事のような集計をelasticsearchで実現するクエリが分からず困っております。

期待する結果は、SQLで言う所の次のクエリに相応するものです。

SELECT `都道府県`, `物件種別`, COUNT(*) FROM sample_data GROUP BY `都道府県`, `物件種別`;

集計対象データ

  • id
  • 物件名
  • 都道府県(東京、神奈川、.....)
  • 物件種別(賃貸、売買、.....)

集計後データ

  • 東京
    • 賃貸: xxx件
    • 売買: yyy件
  • 神奈川
    • 賃貸: xxx件
    • 売買: yyy件 ...

関連ツイート

http://twitter.com/yoshi_ken/status/462073860062322688

1つの情報に1対多の情報が紐付くようなケースでファセット検索する方法の御指南を頂けますでしょうか。

集計対象データ

  • id
  • name : 物件名
  • station_near : 最寄り駅
    • line : 1つ以上の最寄り駅の路線 (複数持たせたいため、仮に配列型としております)
    • station : 1つ以上の最寄り駅
    • station_distance_by_walk : それぞれの駅からの徒歩分数

データサンプル

{
  "id" : 1,
  "name" : "foo",
  "station_near" : [
    { "line" : ["5001_山手線","5002_京浜東北線",...], "station" : "1234_品川", "station_distance_by_walk" : 10},
    { "line" : ["5001_山手線","5002_京浜東北線",...], "station" : "2345_横浜", "station_distance_by_walk" : 8},
  ]
},
{
  "id" : 2,
  "name" : "bar",
  "station_near" : [
    { "line" : ["5003_東西線"], "station" : "3456_早稲田", "station_distance_by_walk" : 10}
  ]
},
...snip...

集計後データ

Case1: station(駅)毎に何件の案件が存在するかをファセット検索します

  • 1234_品川 : n件
  • 2345_横浜 : n件
  • 3456_早稲田 : n件

Case2: line(路線)の下に、station(駅)毎に何件の案件が存在するかをファセット検索します

  • 5001_山手線 : n件
    • 1234_品川 : n件
    • 2345_横浜 : n件
  • 5002_京浜東北線 : n件
    • 1234_品川 : n件
    • 2345_横浜 : n件
  • 5003_東西線 : n件
    • 3456_早稲田 : n件
@y-ken
Copy link
Author

y-ken commented May 8, 2014

Solr4から導入された注目のPivotFacetingを、elasticsearchでも同様に使う実例サンプルの紹介をしていただきました。Thank you for posting an article by @johtani.

@supercaracal
Copy link

参考にさせていただきます。ありがとうございます。

@y-ken
Copy link
Author

y-ken commented May 9, 2014

Sounds Good. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment