Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 复杂URL处理概念_Mongodb_Url_Alias_Fuzzy_Bigdata - Fatal编程技术网

Mongodb 复杂URL处理概念

Mongodb 复杂URL处理概念,mongodb,url,alias,fuzzy,bigdata,Mongodb,Url,Alias,Fuzzy,Bigdata,我目前正在努力解决一个复杂的URL处理概念问题。应用程序有一个产品属性数据库表/集合,其中包含所有不同的产品类型(即类别、颜色、制造商、材料等) 现在,我们的任务是以下面的方式处理URL请求,以各种(!)可能的顺序检索包含的产品属性。唯一允许的字符是破折号(已解决的SEO要求,一些属性也可以包含破折号,我认为这也是一个重要的点,即“suv汽车”类别或制造商“梅赛德斯-奔驰”): …因此:应该允许属性的每个订单!结果必须是关于每个URL请求使用的属性的信息(顺便说一句,是的,重复的内容将通过重定向

我目前正在努力解决一个复杂的URL处理概念问题。应用程序有一个产品属性数据库表/集合,其中包含所有不同的产品类型(即类别、颜色、制造商、材料等)

现在,我们的任务是以下面的方式处理URL请求,以各种(!)可能的顺序检索包含的产品属性。唯一允许的字符是破折号(已解决的SEO要求,一些属性也可以包含破折号,我认为这也是一个重要的点,即“suv汽车”类别或制造商“梅赛德斯-奔驰”):

…因此:应该允许属性的每个订单!结果必须是关于每个URL请求使用的属性的信息(顺便说一句,是的,重复的内容将通过重定向和预定义的模式修复)。“不存在的属性”/“垃圾”是可能的,应该忽略

更新:

想法1:我思考这个问题的一种方法是用破折号分割查询字符串,然后逐值分析,问题是:在某些属性的两个或三个或更多的单词组合中,有太多不同的组合和变体,所以我认为大量的查询扼杀了这个想法

想法2:另一种方法是(在我看来)用所有不同的组合构建一个太大的Alias/URL表,但我认为这只是一个丑陋的解决方法。有大约15000个不同的属性,因此不同排序顺序中的别名计数正在扼杀这一想法


想法3:轮到你了!感谢您的关注和时间。

如果您将所有属性值限制为唯一,这是唯一可行的方法。所以,你可以创建一组类别+颜色+制造商等。所有值都必须是唯一的。这将允许您查找该值所属的属性。 这方面的数据结构应该相当简单:

{_id:ValueOfTheProperty, Property:TypeOfProperty}
以下是一些可能的示例:

{ _id: Red, Property: Color }
{ _id: Green, Property: Color }
{ _id: Boots, Property: Category }
{ _id: Shoes, Property: Category }
...
这样,顺序就无关紧要了,您可以在一次过程中将它们转换为地图:

{ Color: Red, Category: Boots }

不过,我在这里预测模糊名称会有一些问题。

虽然你的问题有点宽泛,但下面是一些想法。除非你找到一个免费的或商业的引擎,它完全按照你想要的方式工作,否则没有一个令人敬畏的答案

我认为你的问题是把URL当作关键字列表。
  • 将Lucene用作关键字/标记系统。这取决于你建议的搜索类型,包括短语、词干等
  • 在选择的数据库中存储和索引数据,但将关键字拉入内存,并为所有关键字和项目建立一个位索引。遍历关键字表,生成加权结果。如果关键字的顺序很重要,您还需要根据单词顺序将结果集传递到权重。这些类型的搜索总是需要快速限制其结果集,以便快速返回结果
  • 从工作匹配中疯狂地缓存结果,并为用户在给定URL中点击次数最多的结果提供优先级
  • 使用MongoDB中的索引攻击数据库。您仍然需要合并和权重结果。非常密集,不太可能很好地利用数据库资源
  • 阅读一些关于关键词搜索的学术论文。这是一个流行的话题
  • 构建一个包含破折号的单词表,并在运行查询之前对其进行规范化/转换
  • 始终首先检查完整的精确匹配

感谢您的回复,弗拉基米尔!你说的“你做了一套类别+颜色+制造商”到底是什么意思?如何拆分URL请求中的术语?如何处理这两个单词的组合?如何处理不同的排序顺序?数据库产品属性表/集合如下:
{id:1,别名:“梅赛德斯-奔驰”,类型:“品牌”},{id:2,别名:“suv汽车”,类型:“类别”},{id:3,别名:“汽车”,类型:“类别”},{id:4,别名:“丰田”,类型:“制造商”},{id:5,别名:“红色”,类型:“颜色”}
最后,我需要通过URL匹配产品权限的id和类型。只需按破折号拆分即可。然后按id查找值。我使用_id存储值,以说明值在所有属性类型中必须是唯一的。你没有提到任何关于排序的事情。谢谢你有趣的方法!我完全同意这个问题没有现成的解决方案:)目前我们使用MongoDB作为DB,使用Elasticsearch作为搜索。。。你能给我一些更详细的信息吗?你将如何构造Lucene/ES索引或MongoDB集合主索引,以获得正确加权的结果?挑战在于为每个URL的每种类型的产品属性获得最佳的单一结果,对吗?这意味着MongoDB中的聚合查询或Elasticsearch中的刻面搜索,对吗?对于MongoDB中的权重,我认为最好是对第一次传递的文档进行第二次传递,第一次传递很可能是候选文档。然后,您需要根据顺序确定权重。(同样,我不确定MongoDB是否适合这项工作)。对于Lucene,只要标记和字段的索引正确,我希望当单词的顺序正确(完全匹配),而不是正确的单词,顺序不同时,它会返回一个合理的加权搜索响应。我没有任何经验。是的,这可能是一个方面的搜索(从文档的快速扫描)。非常感谢您的快速回复!我认为搜索技术将是szenario的最佳选择,你在这一点上是对的。。谢谢所以我认为解决方案可能是一个产品属性Lucene/Elasticsearch索引,具有不同的类型和别名。您是否知道如何查询Lucene并获得每种类型的最佳匹配项,即获得最佳匹配制造商、最佳匹配类别和最佳匹配类别
{ _id: Red, Property: Color }
{ _id: Green, Property: Color }
{ _id: Boots, Property: Category }
{ _id: Shoes, Property: Category }
...
{ Color: Red, Category: Boots }