如何制作点“”下划线“ _”的行为类似于MongoDB中$ text索引中的空格

问题描述

我将在我的应用程序中添加搜索功能,该应用程序在Mongo数据库中具有一个用户集合。每个用户都有一个具有以下规则的唯一用户名

  • 所有字母均为英文小写字母。
  • 还可以包含数字,点和下划线。

每个用户也有一个名字-字符串和空格,类似于Instagram和Twitter规则。因此,我想提供一种搜索功能,通过name和userName属性在users集合中进行搜索。我试图为这些属性创建一个索引,如下所示:

db.users.createIndex({“ userName”:“ text”,“ name”:“ text”})

这根本不是一个好的解决方案,因为例如,如果有一个用户名为“ hasan.yousef”的用户,而我搜索了“ yousef”,则该用户将不会出现。 我希望听到你们有更好的解决方案或更好的索引设计。我也不确定问题的严重性,我想在其他资源中阅读更多有关类似问题的信息。

解决方法

如果使用Atlas Search,则可以通过映射分析器配置此行为。参见https://docs.atlas.mongodb.com/reference/atlas-search/analyzers/custom/

对于文本索引,https://docs.mongodb.com/manual/core/index-text/#tokenization-delimiters表示令牌化是不可配置的。您可以在文档中创建第二个字段,用于存储为搜索而转换的文本(即_和。替换为空格),并将该字段用作文本索引。