代码之家  ›  专栏  ›  技术社区  ›  amit

Firefox的“很棒”工具栏如何匹配字符串?

  •  27
  • amit  · 技术社区  · 17 年前

    问题是Firefox3如何进行字符串匹配以查找匹配的条目 url bar . 每个条目上的子字符串匹配可能很慢。什么算法可以用于在任何位置快速匹配?

    4 回复  |  直到 14 年前
        1
  •  31
  •   orzechow    5 年前

    Firefox3.0中位置栏的算法有点复杂。它将从两个(Firefox 3.5及更高版本的三个)不同的查询中获取数据:

    • 对于第一个查询,它检查moz_inputhistory表,查看当前搜索字符串是否存储在该表中。这些结果按“秩”排序,秩是一个决定最近使用它的次数的数字。这个数字每天下降一次。此搜索使位置栏随着时间的推移自适应于您选择的内容(在中实现) bug 95739

    • 在Firefox3.5及更高版本中,它会检查moz_关键字表中是否有与搜索文本完全匹配的关键字的书签。

    • 最后一个查询将遍历moz_places中的每个条目,其中包括所有历史访问和书签。这些结果按顺序排列 frecency .

    look at the source code .

    1. 搜索字符串被分成由空格决定的标记(每个非空格“单词”都是一个标记)。
    2. word boundary “在可搜索文本中,然后重试。
    3. 如果我们匹配任何一个可搜索文本,它将显示在位置栏中。
    4. 如果我们没有足够的结果(默认值为12),那么我们将在每次书签和历史访问中重新搜索查询,并以Unicode、不区分大小写的方式对任意位置的每个标记(而不仅仅是单词边界)测试可搜索文本。

    希望这能以一种可以理解的方式解释它!

        2
  •  30
  •   Antti Huima    17 年前

    然后,要进行匹配,您需要执行二进制搜索(if数组)或树搜索(if tree)来查找数据结构中的所有后缀 开始

    #1 AT  --> CAT
    #2 CAT --> CAT
    #3 DOT --> DOT
    #4 OT  --> DOT
    #5 T   --> DOT, CAT
    

    请注意,有六个后缀,但其中两个是相同的(“CAT”和“DOT”中的最后一个“T”),并且都由相同的条目(#5)表示。

    现在,当用户在搜索中键入“OT”(应该匹配“DOT”)时,您可以在日志时间内执行简单的词汇顺序查找,因为您现在正在搜索

    当搜索模式不包含通配符时,这是快速文本搜索的基本原则。

        3
  •  23
  •   orzechow    5 年前

    awesomebar通过一种称为 The Places frecency algorithm .

    “频率”一词本身是“频率”和“最近性”两个词的组合

        4
  •  2
  •   theomega    17 年前

    我认为这取决于底层存储:Firefox存储您访问的页面的SQLite数据库提供了一个快速的子字符串比较功能。

    我认为Firefox会向数据库发出SQL查询。这相当快,因为数据库缓存在内存中。

    推荐文章