当前位置: 首页 > 面试题库 >

Firestore:查询名称与搜索词匹配或相似

吕俊哲
2023-03-14
问题内容

我在Firestore数据库中有一个用户列表及其名称。我要实现的目标是使用户能够搜索并找到其他用户。我的问题是:

Query query = db.collection("users").whereEqualTo("name", searchTerm);
FirestoreRecyclerOptions<UserObject> response = new FirestoreRecyclerOptions.Builder<UserObject>()
                .setQuery(query, UserObject.class)
                .build();

在上面的代码中,仅当我输入的名字和姓氏完全正确时,我才能找到用户。但是我想要获得的用户确实具有相似的名字或姓氏。而且,用户的姓氏和名字存储在一个字符串变量中。就像在Facebook中一样,如果您搜索一些名称,它也会显示相似的名称。有没有一个好的方法可以通过Firestore实现这一目标?


问题答案:

根据官方文件:

Cloud Firestore不支持本机索引编制或在文档中搜索文本字段。此外,下载整个集合以在客户端搜索字段是不切实际的。

因此,我强烈建议您不要下载整个集合以进行搜索,这是不值得的。但是为了获得更好的搜索,我建议您使用以下查询:

Query query = db.collection("users").startAt(searchText).endAt(searchText+ "\uf8ff");

如果该查询不是您要搜索的查询,则建议您使用Algolia搜索,Firebase也建议您使用该搜索。我还建议您观看此
视频



 类似资料:
  • 有没有办法在elasticsearch中查询一组术语的相似性(匹配分数)? 简单的例子: 数据: 查询: 后果 说明:doc1包含搜索中存在的所有标记。doc2包含搜索中存在的3个标记中的2个 所以基本上查询将返回按匹配排序的文档列表,其中匹配=文档中的标签与查询中的标签有多相似。不需要模糊性。返回%只是一个例子,返回点或其他单位就可以了。标签的数量可以不同。 我正在设计系统,因此可以以任何格式存

  • 我正在尝试使用C#使用Nest进行匹配查询。Match查询不会返回任何结果,因为生成的JSON的语法似乎不正确,我确信有一些文档包含此关键字。下面是C代码片段 这将生成以下查询: 但是,当我在Kibana控制台Get\u search中调整同一查询时,该查询返回0个结果 我得到搜索词的结果。请注意,Kibana查询的语法中缺少“第二个查询标记”。 我确实检查了文档,似乎我的语法是正确的https:

  • 匹配查询用于实现以下情况的映射是什么 不区分大小写的搜索 数字搜索 特殊字符搜索 单字符搜索 > 我尝试使用通配符,但id不支持区分大小写 尝试使用小写规范化器匹配查询,它不支持特殊字符和单字符搜索 已尝试使用 ngram 匹配查询,但它不支持特殊字符和数字搜索。 任何人都可以帮助我的映射来支持上面提到的所有情况,无论是类型还是类型都很好

  • 问题内容: 我们可以像这样在特定document.field中搜索所有单词: 这将搜索词,并在该领域,从而只返回这些文档将在所有这些词场。 但是我想做的却有些不同。 我想进行查找,以便如果该文档字段的所有单词都出现在我的搜索查询中,则它将返回该文档。 例如 假设Elasticsearch数据库中有一个文档 现在,如果我搜索“ a”,它将返回该文档,因为document.title中的所有单词确实存

  • 试图让搜索按我需要的方式进行。。。目前,我使用StandardAnalyzer()将数据分析到索引中,然后使用QueryParser()和Query()并执行。。。如果文档中有“可疑”一词,搜索“可疑”,我会在其中找到我的文档,但如果搜索“可疑”,我不会得到任何结果。。。所以我的问题是,我想对我的搜索实现词干分析或更好的查询。。。我知道你会得到SnowBallaAnalyzer用于堵塞,但它在Lu

  • 我希望与字段中的字符串完全匹配,然后返回一天,提取所有此类记录。我所使用的json似乎也与简单的单词相匹配。我不确定我哪里出了问题。我需要向这个查询JSON添加吗?我目前拥有的JSON如下所示: