我目前正在努力解决一个复杂的 URL 处理概念问题。该应用程序有一个产品属性数据库表/集合,其中包含所有不同的产品类型(即类别、颜色、制造商、材料等)。
{_id:1,alias:"mercedes-benz",type:"brand"},
{_id:2,alias:"suv-cars",type:"category"},
{_id:3,alias:"cars",type:"category"},
{_id:4,alias:"toyota",type:"manufacturer"},
{_id:5,alias:"red",type:"color"},
{_id:6,alias:"yellow",type:"color"},
{_id:7,alias:"bmw",type:"manufacturer"},
{_id:8,alias:"leather",type:"material"}
...
现在的任务是按照每个(!)可能的顺序处理以下样式的 URL 请求,以检索包含的产品属性。唯一允许的字符是破折号(已解决的 SEO 要求,某些属性也可以包括它们自己的破折号 -我认为这也是一个重要的点- 即类别“suv-cars”或制造商“mercedes-benz”):
http:\\www.example.com\{category}-{color}-{manufacturer}-{material}
http:\\www.example.com\{color}-{manufacturer}
http:\\www.example.com\{color}-{category}-{material}-{manufacturer}
http:\\www.example.com\{category}-{color}-nonexistingproperty-{manufacturer}
http:\\www.example.com\{color}-{category}-{manufacturer}
http:\\www.example.com\{manufacturer}
http:\\www.example.com\{manufacturer}-{category}-{color}-{material}
http:\\www.example.com\{category}
http:\\www.example.com\{manufacturer}-nonexistingproperty-{category}-{color}-{material}
http:\\www.example.com\{color}-crap-{manufacturer}
...
...所以:应该允许每个属性的顺序!结果必须是有关每个 URL 请求所用属性的信息(顺便说一句,是的,重复的内容将通过重定向和预定义的模式来修复)。“不存在的属性”/“废话”是可能的,应该被忽略。
更新:
想法1:我正在考虑这个问题的一种方法是用破折号分割查询字符串并按值分析它们,问题:在某些属性的两个或三个或更多单词组合中,有太多不同的组合和变体所以我认为大量的查询扼杀了这个想法。
想法 2:另一种方法是使用所有不同的组合构建一个(在我看来)太大的 Alias/URL-Table,但我认为这只是一个丑陋的解决方法。大约有 15.000 个不同的属性,因此不同排序顺序中的别名计数正在扼杀这个想法。
想法3:轮到你了!感谢您的思想和时间。