具有弹性搜索的分组方面

时间:2013-09-26 12:31:28

标签: ruby-on-rails elasticsearch tire faceted-search

我正在寻找一种在分组列表中显示我的方面的方法。例如,我有一些用户和一个方面按国家/地区进行过滤,这给了我:

  • 国家
    • 荷兰(5)
    • 英格兰(2)
    • 埃及(5)
    • 卢旺达(2)

我想拥有的是:

    • 荷兰(5)
    • 英格兰(2)
  • 非洲
    • 埃及(5)
    • 卢旺达(2)

我在Rails应用程序中使用Tire gem,我的模型和关系是这样的:http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-option_groups_from_collection_for_select

我已经用Google搜索了几个小时的例子,但是在Elasticsearch中找不到嵌套/分组方面的任何内容。希望有人能帮助我朝着正确的方向前进!非常感谢提前!

丹尼尔

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式索引数据然后解析输出来处理这个问题。使用“对象”版本应用过滤器,并将解析版本作为构面显示过滤器。

例如:

    "mydocument":{
    "attributes":[     
       "location":{
        {"continent":"europe",
        "country":"england"
       },
     "fur_style":"long"
   ],
"facets":[
       {"location":"Europe##england"},
       {"fur_style":"long"
    ]
    }

当您收到数据时,您将拥有:

"facets":[
{"location":"Europe##england",
"total":5},
{"location":"africa##egypt",
"total":7}
{"fur_style":"long",
 "total":3}
etc etc
]

在您的应用程序中,您只需使用##分隔符(或任何您想要的内容)循环并拆分术语。