我正在使用firebase进行数据存储.数据结构如下:
products:{
product1:{
name:"chocolate",
}
product2:{
name:"chochocho",
}
}
Run Code Online (Sandbox Code Playgroud)
我想对这些数据执行自动完成操作,通常我会像这样编写查询:
"select name from PRODUCTS where productname LIKE '%" + keyword + "%'";
Run Code Online (Sandbox Code Playgroud)
因此,对于我的情况,例如,如果用户输入"cho",我需要同时带上"chocolate"和"chochocho".我考虑将所有数据放在"产品"块下,然后在客户端进行查询,但这可能需要大量数据库的内存.那么,我该如何执行sql LIKE操作呢?
谢谢
我正在考虑使用Firebase作为一个应用程序,人们应该使用全文搜索几千个对象的集合.我喜欢提供仅客户端应用程序的想法(不必担心托管数据),但我不知道如何处理搜索.数据将是静态的,因此索引本身并不是什么大问题.
我假设我需要一些运行查询的额外服务并返回Firebase对象句柄.我可以在某个固定的位置启动这样的服务,但后来我不得不担心它的可用性广告可扩展性.虽然我不希望这个应用程序有太多的流量,但它可以在几千个并发用户中达到峰值.
建筑思想?
我试过这个:
Query firebaseSearchQuery =
myRef.orderByChild("from").startAt(searchText).endAt(searchText+"\uf8ff");
Run Code Online (Sandbox Code Playgroud)
但我想要这样的东西
Query firebaseSearchQuery =
myRef.orderByChild("from").contains(searchText);
Run Code Online (Sandbox Code Playgroud)
有可能的 ?
我正在实施社交象棋游戏.每个用户都可以创建一个新游戏,他们会等到系统找到他们的对手.
当用户创建游戏时,他们会指定约束:他们想要玩的颜色,以及对手的最低国际象棋等级.
对手可以匹配也可以不匹配.例如,以下两个对手将匹配:
// User 1 with rating 1700 // User 2 with rating 1800
// creates this game // creates this game
game: { game: {
color: 'white', minRating: 1650
minRating: 1600 }
} // User did not specify a preferred color,
// meaning they do not care which color to play
Run Code Online (Sandbox Code Playgroud)
因此,如果用户1是系统中的第一个用户,并创建了他们的游戏,他们将等待.用户2创建游戏后,应立即与用户1匹配.
另一方面,以下两个对手将无法比赛,因为他们都想打白棋.在这种情况下,两者都应该等到其他人用color: 'black'(或未指定颜色)创建游戏,并且minRating符合要求.
// User 1 with rating 1700 // User 2 with rating 1800
// creates this game // creates this …Run Code Online (Sandbox Code Playgroud) 我想使用 firebase 实时数据库为我的应用程序创建一个搜索功能,类似于 facebook 搜索。
我做了一些研究并承认 Firebase 实时无法使用“文本包含”进行搜索。但我相信必须有某种方法来实现它,例如组合 startAt 或 endAt。
我需要一些关于最佳实践的建议。
数据库结构将如下所示:
Restaurant
-->RandomID
---->name: 'Good Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'Dixon Lee Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'MCD'
---->address:
---->desc:
Run Code Online (Sandbox Code Playgroud)
编辑 我不确定 startAt 和 endAt 如何工作。如果我使用 startAt(3) 是否应该返回 3 及以上?如果我将 startAt 与字符串一起使用会怎样?就像我遇到的下面的问题:
firebase.database().ref('/restaurants').orderByChild('name').startAt('Good').on('value',snap=>{
console.log(snap.val())
})
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用 startAt/endAt 实现“文本包含”,它将找到以关键字开头/结尾的字段的特定值。不确定这是否是 startAt/endAt 的用法。
我想在Firebase数据库上执行通配符查询,并且不知道库是否支持这一点. - (我猜它没有.)
我想要一个网络流量尽可能少的最佳解决方案,假设数据集是数百万条记录.
数据集(使用前缀通配符):
user_id:
id_001123:
name: "java"
id_002124:
name: "objective-c"
id_003125:
name: "swift"
Run Code Online (Sandbox Code Playgroud)
代码如何使用通配符检索记录id_002124名称字段,您只有一部分ID.例如."%124".
预期结果为id_002124,名称为"objective-c"
任何移动语言示例代码都很棒.(目标C /夫特/爪哇)
android objective-c firebase swift firebase-realtime-database
我想查询包含输入的 Firebase。例如在下面的数据库结构中,我想查询包含“4140”的所有节点,所以我使用此代码
var catref = Cataloguedatabase.ref("/Listing Search/");
return catref.once('value').then(function(snapshot){
snapshot.forEach(childSnapshot => {
let snapdb = childSnapshot.val();
let key = childSnapshot.key;
//use ES6 includes function
if(key.includes(schname)){
console.log(childSnapshot.val());
var searchresults = childSnapshot.val();
var container = document.getElementById('listing_gallery');
// container.innerHTML = '';
var productCard = `
<div class="col-sm-3">
<div class="card" onclick="gotoproduct(this);" id="${key}">
`
container.innerHTML += productCard;
}
})
})
Run Code Online (Sandbox Code Playgroud)
这行得通,但问题是它首先查询所有子节点并对数组进行排序。这对于子节点很少的节点来说是可以的,但是当它有数千个子节点时,它变得不切实际。有没有我只能查询包含 firebase 中的值的键,如果没有,我还能如何实现?
firebase ×7
android ×2
javascript ×2
algorithm ×1
angularfire ×1
nosql ×1
objective-c ×1
swift ×1