blog-post

掌握 Manticore Search 的模糊搜索

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

我们将在本文中探讨的模糊匹配技术使 Manticore Search 能够实施智能匹配策略,确保全面的结果检索。在这个背景下,相关性变成了一门微妙的艺术,而不是一门严格的科学。

理解搜索相关性

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

精确匹配在许多方面表现良好。对于结构良好的数据,搜索“laptop”将显示所有包含该术语的相关记录,无论是在标题、描述还是类别中。通过增强数据建模,搜索“laptop”甚至可以返回相关项目,如笔记本电脑配件或计算机服务。

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

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

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

理解模糊搜索

什么是模糊搜索?

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

替代术语包括近似字符串匹配或模糊字符串匹配。

示例:

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

请参阅更多示例及其在 Manticore 中的实现。

什么是模糊匹配?

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

示例:

  • 输入“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”(德语中的“糖”)。如果没有布局意识,搜索将因 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”如果在俄罗斯键盘上输入实际上是“привет”(俄语中的“你好”)。

其他模糊匹配技术

使用前缀搜索的部分单词匹配

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

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

同义词

同义词告诉引擎哪些单词和表达式被视为等价——例如,裤子 = 裤子。因此,搜索“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;

这将匹配关于“人工智能”的文章,尽管存在拼写错误。

国际网站

对于服务多语言受众的网站,键盘布局意识尤其有价值:

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

这将匹配包含“привет”(俄语中的“你好”)的内容,当用户意外地使用错误的键盘布局输入时。

结论

模糊搜索不再是可选的 - 它是现代搜索实现的必需品。Manticore Search 提供了复杂但易于访问的模糊搜索功能,可以显著提升用户体验,同时适应人类生成查询中的自然变体。

通过利用 Manticore 的 Levenshtein 距离算法和独特的键盘布局意识,您可以创建让用户感觉几乎神奇的搜索体验。即使他们的查询不完全正确,他们也能找到自己想要的内容。

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

其他资源

安装Manticore Search

安装Manticore Search