如何从查询结果中构建可过滤选项列表?

时间:2014-01-02 09:57:59

标签: elasticsearch

我有一系列产品,每个产品都有:

  1. 属性(例如:大小:xl,s,xxl;颜色:黄色,红色,蓝色; ....)
  2. 制造商
  3. 类别(产品可以分为多个类别)
  4. 此集合在ElasticSearch中编入索引。现在,当我查询A类中所有产品的列表时,我还想得到:

    1. 所有产品的价格范围(最小 - 最大)
    2. 所有可能选项和值的列表(大小,颜色和相应的值xl,s,xxl,黄色​​,红色,蓝色)
    3. 制造商(Nike,Addidas,....)
    4. 类别
    5. 然后,我将使用这些信息构建一个过滤器,用户可以使用该过滤器缩小结果列表(类似于许多其他电子商务网站上看到的过滤器,如亚马逊,Overstock,Ebay,......)

      我研究了分面搜索,但不确定这是否是我想要的,我很乐意找到一种方法,以尽可能少的查询来检索我需要的所有信息。

2 个答案:

答案 0 :(得分:1)

当涉及到亚马逊类别搜索的风格时,

Facets绝对是最佳选择。要在尽可能少的查询中检索所有方面,您可以非常轻松地执行此操作,只需包含更多内容。我使用了Sense chrome扩展,因为它非常适合搜索示例。在这个例子中,我放置了一些产品文档,包括名称,价格,制造商,类别,颜色。正如你所看到的,我们在一场比赛中搜索了所有这些方面。您可以执行您喜欢的查询,甚至可以执行全局构面或任意数量的构面(范围,直方图等)。这完全取决于您想要的文档以及数据的形成方式。其中一个非常激动人心的部分是下一件大事Aggregations!您可以使用聚合进行精彩搜索。假设您有时间戳和位置,您可以在特定位置的时间之间对颜色进行聚合。 qbox.io将有一篇博文,内容是关于未来几天你可以用aggs做的一些有趣的事情。

DELETE /test_index

PUT /test_index

PUT /test_index/product/1
{
   "name":"prod1",
   "price":19.95,
   "manufacturer":"manu1",
   "category":["cat1","cat2"],
   "color":"red"
}

PUT /test_index/product/2
{
   "name":"prod2",
   "price":25,
   "manufacturer":"manu2",
   "category":["cat2","cat3"],
   "color":"yellow"
}

PUT /test_index/product/3
{
   "name":"prod3",
   "price":4.99,
   "manufacturer":"manu2",
   "category":["cat1","cat2","cat3"],
   "color":"yellow"
}

PUT /test_index/product/4
{
   "name":"prod4",
   "price":19.95,
   "manufacturer":"manu3",
   "category":["cat1","cat3"],
   "color":"blue"
}

POST /test_index/_search
{
   "query": {
       "match_all": {}
   },
   "facets" : {
       "price_stats" : {
           "statistical" : {
               "field" : "price"
           }
       },
       "color_terms" : {
           "terms": {
              "field": "color",
              "size": 10
           }
       },
       "manufacturer_terms" : {
           "terms": {
              "field": "manufacturer",
              "size": 10
           }
       },
       "category_terms" : {
           "terms": {
              "field": "category",
              "size": 10
           }
       }
   }
}`

答案 1 :(得分:0)

如果您想要超越ElasticSearch游戏,为什么不查看最新的ElasticSearch测试版,找到here,其中包括聚合Here是一篇不错的博客文章,解释了聚合及其与方面的差异,以及它无限的可能性。

ElasticSearch 1.0.0离我们不远,所以不要太担心参与测试计划。