我正在建立一个电子商务网站的产品目录。我需要建立一个基于azure搜索/solr/ElasticSearch的索引。问题是保存特定于市场的属性。该网站支持109个市场,每个市场都有特定的数据,如评级、价格、浏览量、愿望列表等,我需要保存在索引中,例如:产品1将有109个评级(每个市场的评级不同)/109价格(每个市场的价格可能不同)对应于109个市场。而且我将不得不使用这个属性添加一个提升功能,以便当人们在搜索这个时,查看/评级较高的产品会出现在上面。2我如何设计指数定义来支持这一点?我可以通过每个产品创建一个索引文档来实现这一点吗?或者我必须为每个市场创建一个索引文档吗?一些提示将非常有帮助。我已经花了几天的时间来研究这个问题,但无法得出针对此用例进行优化的结论。谢谢!
我提出的指数定义:
-id
-mktUSA
--mktId
--rating
--views
--price
...
-mktCanada
--mktId
--rating
--views
--price
...
-locales
--En
--Fr
--Zh
...
...other properties
这种方法的问题是在评分配置文件中配置一个量级评分函数,以根据市场提升产品
例如:如果用户来自加拿大,则在认知搜索计算搜索相关性分数时,仅应考虑基于加拿大的评级/视图,而不考虑其他市场评级。
Elastic search有一个简洁的Function score query解决方案,可用于动态配置评分函数
1条答案
按热度按时间dw1jzc5e1#
据我所知,您的问题是您希望拥有一个包含支持109个不同市场的产品的单一索引。这样,您的产品模型的许多不同属性就可以是特定于市场的。您所关心的是模型变得过大,或者它是否是一个可伸缩的设计。确实如此。您可以拥有1000多个属性而没有问题。
我已经为多个市场的电子商务构建了一个类似的搜索解决方案。
对于价格,我为每个市场指定了一个价格。我有大约80个市场,所以有80个价格。没有办法绕过去。我可能也会为评级和浏览量指定同样的价格。每个市场一个。
在我们的应用程序中,我们对市场、语言和国家使用单独的维。市场可以是斯堪的纳维亚、BeNeLux或亚太地区。您需要清楚地定义您的案例中的市场,并与业务部门商定您拥有的市场以及您处理更改的方式。国家 * 可以 * 直接Map到市场,但也可能有所不同。最后,语言通常跨市场/国家/地区共享,您通常只需支持20-25种语言。
建议的数据模型
我试图说明标题和描述是 * 语言特定的 *。价格和评级是 * 市场特定的 *。
对于20-25个特定于语言的属性,您必须考虑使用什么分析器。您希望使用特定于语言的分析器,最好是Microsoft分析器,因为它们具有更好的语言学支持,具有完全的词形分解等功能。
当你开发你的前端应用程序时,你必须跟踪你所引用的特定属性的市场、国家和语言。这是支持boosting等的最简单的方法。
不建议使用每个市场的索引你可以为每个市场创建一个索引。我以前也使用过这种方法。我不建议这样做。这意味着每次添加、更改或删除项目时,你都必须更新109个索引。而且Azure搜索最多支持每个服务50个索引。