如果按姓名中的部分单词搜索,就能找到用户。例如:
搜索“us”将返回“User6 Name12”,
搜索“nam”将返回“User6 Name12”,
搜索“ser6”将不会返回“User6 Name12”,因为数组不包含这部分字符序列。
userName
如果我按完整的单词分隔而不是使用上述方法并将其存储为数组/映射,
我可以通过查询获得相同的结果吗?
对于像我这样的单字段,"userName": "User Name"
我可以应用这样的查询,collection("users").sortBy("userName").startAt(searchText).endAt(searchText + '\uf8ff')
它会返回从名称的第一个字符到字符串末尾的所有字符,但我无法从第二个单词开始搜索(例如在“用户名”中搜索“名称”)。我花了几天时间寻找用于数组/映射的相同方法,但一无所获,这可能吗?
第一个屏幕截图中的当前文档仅包含每个单词开头的子字符串,因此您可以搜索全部内容。
您需要用您想要精确匹配的详尽项目列表来填充数组 - 因此数组必须包含
ser6
您的示例中的项目(以及所有其他排列)。这会使数组变得更长,但这是在 Firestore 上实现此类搜索的唯一方法。由于 Firestore 本身不具备您想要的搜索操作,因此您必须通过复制大量数据来模拟它。
老实说,如果您想要类似全文搜索的功能,请使用专用的全文搜索工具,例如 Firebase 文档中有关Firestore 上的全文搜索所示的工具。