【问题标题】:search query "alien vs predator"搜索查询“外星人与捕食者”
【发布时间】:2011-04-18 11:58:20
【问题描述】:

如何做到这一点,当您搜索“外星人 vs 捕食者”时,您还会得到带有“S”字符串“外星人 vs 捕食者”的结果
例如http://www.torrentz.com/search?q=alien+vs+predator
他们是如何实现的?
这是高级搜索引擎的东西吗?

【问题讨论】:

    标签: php mysql search search-engine


    【解决方案1】:

    您可以尝试使用 soundex() 作为字符串的模糊匹配。如果您将 soundex 与标题一起保存,然后使用 LIKE 'XXX%' 将该索引与子字符串进行比较,您应该会有一个不错的匹配。子串计数越高,它们匹配的越接近。

    参见文档:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_soundex

    【讨论】:

      【解决方案2】:

      当词被索引时,它们被根形式索引。例如对于“外星人”,“外星人”、“外星人”、“外星人”都存储为“外星人”。

      当词被搜索时,搜索引擎也只搜索词根形式“外星人”。

      这通常被称为波特词干算法。你可以在这里下载你喜欢的语言的实现 - http://tartarus.org/~martin/PorterStemmer/

      【讨论】:

        【解决方案3】:

        通常,当设置搜索引擎来搜索文本时,会构建一个类似于以下内容的查询:

        SELECT * FROM TBLMOVIES WHERE NAME LIKE '%ALIEN%'
        

        这意味着子字符串ALIEN 可以出现在NAME 字段中的任何位置,因此您将得到像ALIENS 这样的字符串。

        【讨论】:

          【解决方案4】:

          检查复数是词干的一种形式。词干提取是搜索引擎和其他文本匹配的常见功能。请参阅维基百科页面:http://en.wikipedia.org/wiki/Stemming,了解执行词干提取的大量算法。

          【讨论】:

            【解决方案5】:

            这被称为Word Stemming。当文本被索引时,单词被“提取”到它们的“根”。所以打架变成了战斗,滑雪变成了滑雪,跑步变成了跑步,等等。用户在搜索时输入的文本也是如此,所以当搜索词与索引中的值进行比较时,它们就会匹配。

            Lucene 项目支持这一点。我不会认为它是高级功能。尤其是 Google 设定的期望。

            【讨论】:

              【解决方案6】:

              这是搜索引擎的一项基本功能,而不仅仅是一个将您的查询与一组预定义结果相匹配的程序。

              如果你有时间,this 是一本很好的读物,所有关于不同的算法,以及它们是如何实现的。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-10-04
                • 1970-01-01
                • 2012-02-14
                相关资源
                最近更新 更多