我有一系列产品,每个产品都有:
此集合在ElasticSearch中编入索引。现在,当我查询A类中所有产品的列表时,我还想得到:
然后,我将使用这些信息构建一个过滤器,用户可以使用该过滤器缩小结果列表(类似于许多其他电子商务网站上看到的过滤器,如亚马逊,Overstock,Ebay,......)
我研究了分面搜索,但不确定这是否是我想要的,我很乐意找到一种方法,以尽可能少的查询来检索我需要的所有信息。
答案 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)