⚠️ 此页面为自动翻译,翻译可能不完美。
blog-post

Mastering Fuzzy Search with Manticore Search

模糊搜索代表了一类技术,这些技术能够实现搜索查询与内容之间的智能匹配。在其核心,它关乎在搜索术语不完全匹配时仍能找到相关结果。虽然最常用于处理拼写错误和打字错误,但这项技术远不止简单的错误纠正——它可以解释模糊查询,理解非正式语言,处理部分单词,并识别可能不使用相同术语的相关概念。

本文中我们将探讨的模糊匹配技术,使Manticore Search能够实施智能匹配策略,确保全面检索结果。在此背景下,相关性成为一门细致的艺术,而非僵硬的科学。

理解搜索相关性

搜索的基础是精确文本匹配,即查询逐字与索引内容匹配。例如,搜索“laptop”只会返回包含该确切单词的记录,而不是相关术语如“notebook”或“computer”。

精确匹配在许多情况下非常有效。在数据结构良好的情况下,搜索“laptop”会显示所有包含该术语的相关记录,无论是在标题、描述还是分类中。通过增强的数据建模,搜索“laptop”甚至可以返回相关物品,如笔记本电脑配件或计算机服务。

然而,当记录中没有确切的术语,但内容仍然相关时会发生什么?同义词可以帮助解决这个问题。但如果有人搜索“notebook”却输入了“notebok”呢?没有模糊匹配,搜索将不会返回任何结果。

模糊匹配通过使搜索体验更加自然和宽容来增强搜索相关性。当有效实施时,它无缝地整合了原本可能被遗漏的相关项目。就像拼拼图一样,模糊搜索收集相似的碎片,帮助用户找到他们需要的物品。此外,由于用户在搜索过程中经常调整需求,模糊匹配会根据相似性提供选项,就像在选择完美餐点前品尝各种菜肴一样。

现代搜索引擎如Manticore Search、Elasticsearch和Algolia提供了复杂的模糊匹配功能,每种都有其独特的方法。让我们详细探讨Manticore的实现方式。

理解模糊搜索

什么是模糊搜索?

模糊搜索使非完全相同的单词之间能够匹配。它处理各种类型的输入变化,从简单的拼写错误到复杂的拼写错误。这项技术适应了快速打字、移动用户的输入挑战以及不同语言中的拼写复杂性。它对于匹配用户生成的内容特别有价值,这些内容通常包含拼写和术语的变化。该技术还可以结合语音匹配功能。

其他术语包括近似字符串匹配或模糊字符串匹配。

示例:

  • 输入“helo”,找到包含“hello”的记录
  • 输入“help”,找到包含help和hello的记录

请参阅更多示例以及Manticore中如何实现这些功能。

什么是模糊匹配?

模糊匹配将概念扩展到包括基于各种相似性的信息查找。我们将重点讨论基于语言的相似性,包括同义词、语法变化(复数、动词形式等)、基于词典的方法以及其他语言学或NLP技术。我们还将涵盖常见的搜索引擎功能,如部分单词匹配、短语匹配和过滤功能。

示例:

  • 输入“pants”,找到pants、trousers、slacks(同义词)
  • 输入“be”,找到Beatles、bees(前缀搜索)

请参阅更多示例以及Manticore中如何实现这些功能。

模糊逻辑的其他应用

模糊逻辑帮助根据共享特征对项目进行分类。例如,智能手机、平板电脑和笔记本电脑共享作为便携式计算设备的特征,但由于它们的触摸界面和移动操作系统,智能手机和平板电脑更为相关。

模糊逻辑基于相对相似性建立关系,而不是二元的真/假条件(对象基于两者都是“便携式”而不是具有相同的重量而匹配)。

在Manticore中使用Levenshtein距离实现模糊搜索

容错能力允许用户在输入时犯错但仍能找到相关结果。Manticore通过Levenshtein距离算法实现这一点。

什么是拼写错误?

  • 缺失字符:“laptp” → “laptop”
  • 多余字符:“laptopp” → “laptop”
  • 错位字符:“lpatop” → “laptop”
  • 错误字符:“laptip” → “laptop”

Levenshtein距离算法

Manticore的容错能力使用基于距离的匹配,实现Levenshtein距离算法。距离衡量的是输入单词与索引中精确匹配之间的差异。具体来说,它表示将一个单词转换为另一个单词所需的最小操作数(添加、删除、替换或交换字符)。完美匹配的距离为0。当存在精确匹配或距离较小时(一个或两个字符差异),记录将包含在结果中。

例如,如果引擎接收到“laptp”,它可以匹配“laptop”(距离=1 / 缺少一个字符),或“laptps”(距离=2 / 需要两个操作)。

距离设置了一个容差阈值。在 Manticore 中,你可以使用 distance 参数进行配置,默认值为 2:差异为 3 或更多距离的词将被排除在结果之外。

使用 Levenshtein 距离的模糊搜索示例

以下是 Manticore 计算与 "iphone" 匹配所需操作的示例:

  • iphone - 0 差异(精确匹配)
  • iphon - 1 差异(删除:e)
  • iphonee - 1 差异(添加:e)
  • iphne - 1 差异(删除:o)
  • iphonne - 1 差异(添加:n)
  • iphne - 2 差异(删除:o,删除:e)
  • iphonne - 2 差异(添加:n,添加:e)
  • iphne - 3 差异(删除:o,删除:e,删除:n)- 超过默认阈值

结果排序与错误容忍度

关于相关性:所有基于拼写差异的模糊匹配都被视为比精确匹配的相关性更低。因此,距离为 0 的精确匹配记录的排名高于存在错误的记录。同样,存在 1 个错误的记录排名高于存在 2 个错误的记录。

键盘布局感知的模糊搜索

Manticore 模糊搜索的一个显著特点是其键盘布局感知功能。此功能理解用户可能使用不同的键盘布局进行输入,从而导致特定类型的错误。

例如,如果有人不小心使用了错误的键盘布局,Manticore 可以通过考虑不同布局中物理按键的位置来解释查询。Manticore 支持 17 种不同的键盘布局,包括 QWERTY、AZERTY、QWERTZ 等,使其高度适应国际应用。

例如,用户在美式键盘上输入 "yucker",但系统将其解释为德式 QWERTZ 布局。Manticore 识别出不匹配并正确将输入映射为 "zucker"(德语中 "sugar" 的意思)。如果没有布局感知功能,搜索将因 Y/Z 键交换而失败。Manticore 确保即使键盘布局配置错误,用户也能找到结果。

在 Manticore 中设置模糊搜索

在 Manticore 中实现模糊搜索非常简单,支持 SQL 和 JSON API。

使用 SQL 语法

SELECT * FROM mytable 
WHERE MATCH('someting') 
OPTION fuzzy=1, layouts='us,ua', distance=2;

在此示例中:

  • fuzzy=1 启用模糊匹配
  • layouts='us,ua' 指定要考虑的键盘布局(美式和乌克兰式)
  • distance=2 将最大 Levenshtein 距离设置为 2

使用 JSON API

POST /search
{
  "table": "test",
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "*": "ghbdtn"
          }
        }
      ]
    }
  },
  "options": {
    "fuzzy": true,
    "layouts": ["us", "ru"],
    "distance": 2
  }
}

此 JSON 示例演示了 Manticore 如何处理跨布局的拼写错误——"ghbdtn" 在美式键盘上输入实际上会是 "привет"(俄语中 "hello" 的意思),如果在俄式键盘上输入。

其他模糊匹配技术

前缀搜索的局部词匹配

与其他高级搜索引擎一样,Manticore 支持前缀匹配,以实现实时搜索体验。它使引擎能够根据部分单词匹配记录。

例如,包含 "apricot" 的记录会在用户输入 "a"、"ap"、"apr" 时立即返回。无需等待完整单词匹配即可显示结果。

同义词

同义词告诉引擎哪些单词和表达式应视为等效——例如,pants = trousers。因此,搜索 "trousers" 会返回 "trousers" 和 "pants",搜索 "pants" 也会返回 "trousers" 和 "pants"。

虽然基于通用词典的同义词扩展可能过于宽泛,但 Manticore 允许你使用 wordforms 为你的数据集定义特定且上下文相关的同义词。

优化模糊搜索以获得最佳效果

尽管功能强大,但实现模糊搜索需要仔细考虑。它可能会返回太多结果或意外匹配,这可能会影响感知的相关性。

搜索引擎必须管理这种信息扩展。例如,通过优先显示精确匹配,确保它们出现在结果的顶部,高于模糊匹配:

  • 对于拼写错误,精确匹配被认为比模糊匹配更相关(即使错误对用户来说很明显)。
  • 对于同义词,精确匹配比同义词匹配更相关(即使查询词有多个含义,同义词可能更合适)。

Manticore 通过在精确匹配之后显示模糊匹配来管理这一点。这是 Manticore 处理搜索变体的全面方法的一部分。

还有许多 UI 模式可以管理这一点。例如,搜索引擎通常在搜索栏下方添加“建议的拼写”。或者它们提供自动完成或查询建议功能,当用户输入时,会以下拉列表的形式提供建议的查询(和类别),用户可以选择作为他们的查询。Manticore 提供了对这些功能的全面支持,如我们在 Autocomplete API 中所述。

但理想的解决方案是隐藏在表面之下,对用户完全透明,其中搜索引擎返回的结果会给人一种直观的感觉,即显示的项目是最佳且最相关的——即使它们不完全匹配查询的文本。

实际应用

让我们看看 Manticore 的模糊搜索在现实场景中表现优异的例子:

电子商务

在电子商务中,用户经常搜索复杂名称或可能拼错的技术规格的产品。模糊搜索确保他们仍然能找到他们想要的东西:

SELECT * FROM products 
WHERE MATCH('sansung glaxy') 
OPTION fuzzy=1, distance=2;

此查询将成功匹配包含 "Samsung Galaxy" 的产品,即使存在拼写错误。

内容管理

对于内容密集型网站,模糊搜索帮助用户即使忘记术语或标题也能发现相关文章:

SELECT * FROM articles 
WHERE MATCH('artifical inteligence') 
OPTION fuzzy=1;

这将匹配关于 "artificial intelligence" 的文章,即使存在拼写错误。

国际网站

对于服务多语言受众的网站,键盘布局感知功能特别有价值:

SELECT * FROM content 
WHERE MATCH('ghdbtn') 
OPTION fuzzy=1, layouts='us,ru';

这将匹配包含 "привет"(俄语中 "hello")的内容,当用户不小心使用错误的键盘布局输入时。

结论

模糊搜索不再是可选功能 - 它对于现代搜索实现来说至关重要。Manticore Search 提供了复杂但易于使用的模糊搜索功能,可以显著提升用户体验,同时适应人类生成查询中的自然变化。

通过利用 Manticore 的莱文斯坦距离算法和独特的键盘布局感知功能,您可以创建让用户感觉近乎神奇的搜索体验。即使用户没有完全正确地输入查询,他们也能找到所需内容。

无论您是在构建电子商务平台、内容管理系统,还是任何具有搜索功能的应用程序,使用 Manticore 实现模糊搜索都可以带来更高的用户满意度、更好的参与度,最终提高转化率。

其他资源

安装Manticore Search

安装Manticore Search