【问题标题】:How to find matching items for prefixes in query如何在查询中查找前缀的匹配项
【发布时间】:2017-12-05 12:32:17
【问题描述】:

我不知道如何在问题标题中解释它。假设我有一个“红色兴趣蛋糕”的查询(对不起)。我想搜索一个大型项目数据库(比如描述)。我需要找到将整个查询作为其描述的一部分或作为前缀的所有描述/项目。示例:

微红色有趣的蛋糕

符合条件,因为它有“红色”、“兴趣”和“蛋糕”。

思路清晰吗?我该怎么做?我考虑过使用 trie,但我不确定它是否能正常工作。

【问题讨论】:

  • 取决于数据库和语言,你能把你的问题编辑得更简洁吗?
  • 为什么会这样?我想知道要使用的算法/方法。语言/数据库/数据结构部分很灵活。
  • 按空格分割项目,检查单词是否包含查询词
  • 您使用 SQL 语言吗? red other words interest other words -> 匹配? red other words interest other words cake -> 匹配? red other words cake other words interest -> 匹配?顺序重要吗?连续的单词重要吗?所有的词都应该出现吗?您想要准确的结果还是排名相关的结果?
  • @glegoux 1. 如果可以用 SQL 完成,那么可以确定,如果不能,那么我想知道其他方法。 2. 不,它们不匹配。查询中的所有单词都必须出现在项目中,或者作为整个单词或前缀,或者两者兼而有之。 3.只要所有单词都存在,顺序无关紧要。4。在我们得到所有匹配的项目后,我们可以对它们进行排名,但这是一个不同的主题。

标签: python string algorithm performance search


【解决方案1】:

首先,将查询查找为前缀意味着查询作为一个整体存在,因此我们只需关注问题的第二部分,从而降低算法成本。 这就是我对它的纯数学思考方式。假设您的数据库包含大约 100 万条描述,并且每个描述的长度为 1000 个字符。您的查询长度为 100chars(大约 10 个单词 avg) 我建议尽可能多地检索适合您机器的描述。然后在每个记录 abd 上运行一个 kmp 字符串匹配算法,如果它匹配,则将其附加到结果字典中。 应用时,kmp 算法最坏情况执行的成本将类似于 1 mil * (10*(1000+100)) 操作。我想大约需要 10 秒才能获得所有匹配项。 不确定这是否是可接受的解决方案,或者我的假设是否准确。但是尝试使用 kmp 并为您的问题添加一些优化肯定会很有趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-21
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多