【问题标题】:How to integrate "Did you mean" functionality in rails?如何在 Rails 中集成“您的意思是”功能?
【发布时间】:2017-01-10 16:54:41
【问题描述】:

您如何实现“您的意思是:”,就像 Google 在某些 search queries 中所做的那样?

PS:我在我的产品中使用 sphinx。你能建议我如何实现这一点。任何具有此功能的其他搜索引擎的指南或建议都非常受欢迎。 我正在使用 rails2.3.8,如果有帮助的话

一种解决方案可以是:

制作一个包含已知“关键字”或“短语”的字典,并在搜索操作中,如果找不到任何内容,则在该字典中运行辅助查询。每当创建可搜索条目时更新该字典,例如博客文章或用户名。

  • query = "supreman"

  • dictionary = ["superman", "batman", "hanuman" ...](在 DB 表中)

  • 搜索(查询)

  • 如果没有结果,那么

在字典中搜索(其中“关键字”LIKE 查询或“短语”LIKE 查询)=>“超人”

检查 sphinx 或 solr 文档。他们可能会更好地实现这个返回百分比匹配的“Like”查询。

  • display -> 你是说“超人”吗?

但关键是如何让它高效?

【问题讨论】:

    标签: mysql ruby-on-rails full-text-search search-engine


    【解决方案1】:

    看看Damerau-Levenshtein 距离算法。它计算两个字符串之间的“距离”,并确定将一个字符串转换为另一个字符串需要多少步。步数越少,两个字符串越接近。

    This 文章展示了作为 MySQL 存储函数实现的算法。

    该算法比 LIKE 或 SOUNDEX 好得多。

    我相信 Google 使用众包数据而不是算法。即,如果用户键入 abcd,单击后退按钮,然后立即搜索 abd,则它会在两个搜索词之间建立关系,因为用户对结果不满意。一旦你有一个非常大的社区搜索,就会出现这种模式。

    【讨论】:

    • 文章链接返回404
    • @chanchal118 已修复
    【解决方案2】:

    您应该看看 Google 如何实现类似这样的实际理论:How to Write a Spelling Corrector

    虽然该文章是用 Python 编写的,但在文章底部有指向其他语言实现的链接。这是Ruby implementation

    【讨论】:

      【解决方案3】:

      我认为您正在寻找字符串匹配算法。

      我记得mislav's gist 曾经在 initialize 拼写错误时引发错误。这可能是一本好书。

      另外,看看他推荐的一些文章:

      【讨论】:

      • 全文搜索引擎没有内置解决方案或一些 gem 插件吗?
      • 如果我必须实现这个,我会先查看pg_trgm,因为我的大多数应用程序已经使用 PostgreSQL。上次我检查时,Sphinx 没有像这样的模糊搜索,除非是词干提供的。
      【解决方案4】:

      您的意思是说功能是基于语音拼写校正器实现的。当我们拼写错误时,我们通常会写出发音相似的单词。基于这个想法,语音拼写校正器在其数据库中搜索最相似的单词。使用上下文(对于多词查询,其他词也有助于确定正确的词)和词的流行度来打破相似性关系。如果两个词在语音上与拼写错误的词非常接近,则选择符合上下文且在日常生活中更频繁使用的词。

      【讨论】:

        【解决方案5】:

        这对我有用:

        SELECT * FROM table_name WHERE soundex(field_name) LIKE CONCAT('%', soundex('searching_element'), '%')
        

        【讨论】:

        • 无论如何,您可以提供基于搜索词匹配的示例吗?寻找与转置字符相匹配的东西很可能会把它从 EG 中剔除:当 ALPG 和 ALFG 可供搜索时,搜索 ALGP 而不是 ALPG。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多