当前位置: 首页 > 知识库问答 >
问题:

Firebase查询-查找包含字符串的子项

陆安国
2023-03-14

我的Firebase查询有点麻烦。我想查询objects,其中objects子值包含某个字符串。到目前为止,我有一些东西看起来是这样的:

Firebase *ref = [[Firebase alloc] initWithUrl:@"https://dinosaur-facts.firebaseio.com/dinosaurs"];
[[[[ref queryOrderedByKey] queryStartingAtValue:@"b"] queryEndingAtValue:@"b~"]
    observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
    NSLog(@"%@", snapshot.key);
}];

但这只给出起始值为“b”的对象。我想要包含字符串“b”的对象。我该怎么做?

共有1个答案

茹展鹏
2023-03-14

查询API中没有包含或模糊匹配方法,如果您扫描了API和查询指南,您可能已经猜到了这一点。

这个问题不仅在SO[1][2][3][4][5]上讨论得令人恶心,而且我也多次谈到为什么一个人应该使用真正的搜索引擎,而不是尝试这种半心半意的搜索方法

有一个原因,它往往更容易谷歌一个网站找到结果比使用内置搜索,这是一个主要的组成部分,失败。

既然没有内置的contain,那么对于如何手动执行此操作的问题,答案是设置一个服务器端进程,将数据加载/流式传输到内存中,并对内容进行手动搜索,最好使用某种缓存。

但老实说,ElasticSearch在这里更快、更简单、更高效。因为这是一个很大的话题,所以我会让你看一下关于这个主题的博客文章。

 类似资料:
  • 我试图在Flatter Firebase中执行一个“where”查询,以按名称进行过滤(如果对象名为“Una casa roja”,用户写“casa”,则必须返回该对象)。我不知道我能问谁。我只有这个,但不是我想要的: 谢谢

  • 问题内容: 我一直在尝试找出如何使用MySQL进行查询的方法,该查询检查特定列中的值(字符串)是否包含某些数据(字符串),如下所示: 在PHP中,该函数称为,因此可能: 问题答案: 实际上很简单: 的是用于设置任何字符(无,一个或多个)的通配符。请注意,这在非常大的数据集上可能会变慢,因此,如果数据库增长,则需要使用全文索引。

  • 问题内容: 考虑到与类似值的字符串列,什么是查询所有的最佳方法 ,其中包括给定数量的记录 (例如)? 我脑海中的解决方案是: 但由于前导,因此AFAIK该查询无法在列上使用索引。 必须有更好的东西。它是什么? 使用PostgreSQL,但 更希望 该解决方案也适用于其他DB。 问题答案: 在PostgreSQL 9.1中,您可以利用该模块并用它构建一个GIN索引。 您的表达式即使没有左锚也可以使用

  • 问题内容: 我正在使用SQLAlchemy和SQLite3构建查询,其中我想选择其中String列包含特定子字符串的行。做到这一点的最佳方法是什么? 问题答案: 筛选。还有一个不区分大小写的搜索。 对于更高级的界面,您可以允许使用已知的“ dir”通配符。 笔记: 和是(如果数据库是由另一个应用程序创建的,则SQLSoup很有用) 对于SQLAlchemy Core是。当您需要原始SQL的所有功能

  • 问题内容: 要查找当前文件夹中所有包含“ foo”的文件,我使用: 要查找当前文件夹中所有包含“ bar”的文件,我使用: 但是,如何查找不包含“ foo”和“ bar”的所有文件? 问题答案: 要打印 线 不包含某些字符串,可以使用标志: 这样就为您提供了 不 包含或的所有行。 要打印不包含某些字符串的 文件 ,请使用该标志。要不匹配多个字符串,可以将正则表达式与标志一起使用(可以使用多个reg

  • 问题 你需要搜索一个字符串,并返回匹配的起始位置或匹配值本身。 解决方案 有几种使用正则表达式的方法来实现这个功能。其中一些方法被称为 RegExp 模式或对象还有一些方法被称为 String 对象。 RegExp 对象 第一种方式是在 RegExp 模式或对象中调用 test 方法。test 方法返回一个布尔值: match = /sample/.test("Sample text") # =>