我正在尝试将我们的电子商务搜索系统转移到弹性搜索。我们有一堆产品,每个产品可以有多个优惠(由商家出售)。大致是文档的格式是
{
"productId": 1234,
"title": "Apple Macbook Pro",
"description": "Macbook Pro ModelNo:ABC 2.4GHz 8GB RAM",
"offers": [
{
"offer_id": "123",
"offer_seller": "ebay"
"offer_price": 900
"condition": "refurb"
"times_bought": 25,
},
{
"offer_id": "124",
"offer_seller": "amazon"
"offer_price": 1200,
"condition": "new",
"times_bought": 35,
},
{
"offer_id": "125",
"offer_seller": "bestbuy"
"offer_price": 1400
"condition": "new",
"times_bought": 10,
}
]
}
{
"productId": 1235,
"title": "Apple Macbook Air",
"description": "Macbook Air ModelNo:ABC 1.2GHz 4GB RAM",
"offers": [
{
"offer_id": "123",
"offer_seller": "ebay"
"offer_price": 600
"condition": "refurb"
"times_bought": 50,
},
{
"offer_id": "124",
"offer_seller": "amazon"
"offer_price": 999,
"condition": "new",
"times_bought": 55,
},
{
"offer_id": "125",
"offer_seller": "bestbuy"
"offer_price": 1100
"condition": "new",
"times_bought": 20,
}
]
}
更多事实:
这是我的查询
{
"query" : {
"function_score": {
"boost_mode": "replace",
"multi_match": {
"query": "macbook",
"fields": [
"title^10",
"description^5"
]
},
"script_score": {
"params": {
"param1": 2,
"param2": 3.1
},
"script": "_score * doc['offers.times_bought'].value / pow(param1, param2)"
}
}
}
}
我的问题
1.我使用嵌套类型提供商品,因为我想使用offer_price对商品进行分类。我read父母/孩子不支持排序,但每次更新优惠的事实都会重新索引整个产品,这让我想知道父/子是否是更好的选择。
2.我想为每件退回的产品展示最好的(1或2)优惠。有没有办法为每个返回的结果对嵌套文档进行排序,还是应该由我自己来做?
3.如果我想将'times_bought'存储在索引之外,因为它比索引中的任何其他内容更频繁地更新。如何将其插入排名?我可以扩展弹性搜索评分类并使用此外部数据结构进行修改吗?
任何建议/建议都将不胜感激。
答案 0 :(得分:0)
怎么样:
_price
即可参考最优惠价格。ES和KV商店的这种组合可能看起来比它的价值更麻烦,但请相信我最终会降低复杂性的奇迹。
答案1和2.
至于3: 您可以将其模型化为父/子,这将允许使用单独的间隔进行索引,性能权衡,但我不确定是否诚实。
有点