复杂的URL处理概念

时间:2013-01-25 09:46:18

标签: mongodb url alias fuzzy bigdata

我目前正在努力解决复杂的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-Request的已使用属性的信息(顺便说一句,重复内容将由重定向和预定义模式修复)。 “不存在的属性”/“垃圾”是可能的,应该被忽略。

更新:

想法1:我正在考虑的一个问题是用破折号分割查询字符串并按值分析它们,问题是:在两个或三个或更多单词组合处一些属性有太多不同的组合和变化,所以一个查询的讨论会杀死这个想法我认为..

创意2:另一种方式是建立一个(在我看来)过大的Alias / URL-Table,包含所有不同的组合,但我认为这只是一个丑陋的解决方法。大约有15.000个不同的属性,因此不同排序顺序中的别名计数正在扼杀这个想法。

创意3:轮到你了!谢谢你的思想和时间。

2 个答案:

答案 0 :(得分:0)

如果您将所有属性值限制为唯一,则此方法可行的唯一方法。因此,您制作一组类别+颜色+制造商等。所有值必须是唯一的。这将允许您查找该值属于哪个属性。 这个数据结构应该相当简单:

{_id:ValueOfTheProperty, Property:TypeOfProperty}

以下是一些可能的样本:

{ _id: Red, Property: Color }
{ _id: Green, Property: Color }
{ _id: Boots, Property: Category }
{ _id: Shoes, Property: Category }
...

这样,顺序无关紧要,您可以将它们一次转换为地图:

{ Color: Red, Category: Boots }

虽然,我预测这里有一些暧昧名字的问题。

答案 1 :(得分:0)

虽然你的问题有点宽泛,但下面是一些想法。除非你找到一个完全符合你想要的免费或商业引擎,否则没有一个很棒的答案。

我对您的问题的看法是将URL视为关键字列表。

  • 使用Lucene作为关键字/标签系统。你建议你想要的搜索类型是good,包括短语,词干等。
  • 将数据存储并索引到选择的数据库中,但将关键字拉入内存并构建所有关键字与项目的位索引。迭代关键字表生成加权结果。如果关键字的顺序很重要,您还需要根据字顺序将结果集传递给权重。这些类型的搜索总是需要快速限制其结果集,以便快速返回结果。
  • 将结果像工作匹配中的疯狂一样缓存,并优先考虑用户似乎针对给定网址点击最多的结果。
  • 使用MongoDB中的tag索引攻击数据库。你仍然需要合并和加权结果。非常密集,不太可能充分利用数据库资源。
  • 阅读一些关于关键字搜索的学术论文。这是一个热门主题。
  • 构建一个包含破折号的单词表,并在运行查询之前对其进行规范化/转换
  • 始终先检查完全匹配的完整匹配