2016-01-20 65 views
2

我想实施类似亚马逊的'产品类别'建议。亚马逊建议搜索特定类别中的给定术语而不是全局搜索。这允许更具体的搜索和结果。使用elasticsearch实现建议'xxx in category'

Amazon Suggestion 'in-category'

有没有办法如何实施这一使用由elasticsearch提供的建议功能之一?

目前我的想法是从elasticsearch中获取建议,并将它们按类别分组作为后期处理。有没有内置的东西,返回准备好的“分类”结果?

+0

您是否会提前知道“类别”,即当您索引数据意味着索引说“电话”时,您是否了解“电子产品”,“办公用品”等?或者你想单独查询类别? – ChintanShah25

+0

是的,我知道'categories'提前。 – paweloque

回答

2

如果您事先知道categories,则可以使用completion suggester作为​​传递它们。

我创造了这个样本指数

​​

然后我插入几个产品,有效载荷提供类别

PUT suggest_index/product/11 
{ 
    "name": "watches", 
    "suggest": { 
    "input": [ 
     "watches" 
    ], 
    "payload": { 
     "categories": [ 
     "Men", 
     "Women", 
     "Kids" 
     ] 
    }, 
    "weight": 10 
    } 
} 

{ 
    "name": "phones", 
    "suggest": { 
    "input": [ 
     "phones" 
    ], 
    "payload": { 
     "categories": [ 
     "Electronics", 
     "Office Products" 
     ] 
    }, 
    "weight": 10 
    } 
} 

然后,当您查询,您将获得所有类别都带有建议。

POST suggest_index/_suggest 
{ 
    "product-suggest": { 
    "text": "pho", 
    "completion": { 
     "field": "suggest" 
    } 
    } 
} 

这是输出我得到

"product-suggest": [ 
     { 
     "text": "pho", 
     "offset": 0, 
     "length": 3, 
     "options": [ 
      { 
       "text": "phones", 
       "score": 10, 
       "payload": { 
        "categories": [ 
        "Electronics", 
        "Office Products" 
        ] 
       } 
      } 
     ] 
     } 
    ] 

现在你可以告诉他们在前台,当用户点击搜索按钮,你可以在与该类别和产品信息可能不同的索引搜索。

这是否符合您的要求?

+1

如果您使用“mobile mobile”这个名称为附加产品编制索引,您将得到两个结果:'phones'和'phones mobile'。类别不会分组。但也许我看起来太过分了。也许一个简单的聚合'分类'会做这项工作.. – paweloque

+0

是的,你是对的,但正如你所说聚合可以帮助你。 – ChintanShah25