如何在firebase上执行sql“LIKE”操作?

我正在使用firebase进行数据存储。数据结构如下:

products:{
   product1:{
      name:"chocolate",
   }
   product2:{
      name:"chochocho",
   }
}

我想对这个数据执行一个自动完成操作,通常我写这样的查询:

"select name from PRODUCTS where productname LIKE '%" + keyword + "%'";

所以,对于我的情况,例如,如果用户键入“cho”,我需要把“巧克力”和“chochocho”作为结果。我想把所有的数据都放在“产品”区块下,然后在客户端进行查询,但这可能需要大量的内存来存储大型数据库。那么,我如何执行sql LIKE操作?

谢谢

更新:随着Firebase的Cloud功能的发布,linking Firebase to Algolia via Functions还有一个优雅的方式来实现这一点。这里的优势在于功能/ Algolia几乎没有维护,但是可能会增加自己的成本节点。

目前在Firebase中没有内容搜索。随着API不断扩展,许多更常见的搜索方案(如按属性搜索)将被烘焙成Firebase。

同时,当然有可能成长自己的。然而,搜索是一个广泛的话题(认为创造一个实时的数据存储巨大),被大大低估,并且是您的应用程序的关键特征 – 而不是您想要临时或甚至取决于像Firebase这样的人代您提供。因此,使用可扩展的第三方工具处理索引,搜索,标签/模式匹配,模糊逻辑,加权排名等通常更简单。

Firebase博客的特色是一个blog post on indexing with ElasticSearch,它概述了一个简单的方法,将快速但非常强大的搜索引擎集成到Firebase后端。

从本质上讲,它分两步完成。监控数据并对其进行索引:

var Firebase = require('firebase');
var ElasticClient = require('elasticsearchclient')

// initialize our ElasticSearch API
var client = new ElasticClient({ host: 'localhost', port: 9200 });

// listen for changes to Firebase data
var fb = new Firebase('<INSTANCE>.firebaseio.com/widgets');
fb.on('child_added',   createOrUpdateIndex);
fb.on('child_changed', createOrUpdateIndex);
fb.on('child_removed', removeIndex);

function createOrUpdateIndex(snap) {
   client.index(this.index, this.type, snap.val(), snap.name())
     .on('data', function(data) { console.log('indexed ', snap.name()); })
     .on('error', function(err) { /* handle errors */ });
}

function removeIndex(snap) {
   client.deleteDocument(this.index, this.type, snap.name(), function(error, data) {
      if( error ) console.error('failed to delete', snap.name(), error);
      else console.log('deleted', snap.name());
   });
}

当您要进行搜索时查询索引:

<script src="elastic.min.js"></script>
 <script src="elastic-jquery-client.min.js"></script>
 <script>
    ejs.client = ejs.jQueryClient('http://localhost:9200');
    client.search({
      index: 'firebase',
      type: 'widget',
      body: ejs.Request().query(ejs.MatchQuery('title', 'foo'))
    }, function (error, response) {
       // handle response
    });
 </script>

There’s an example, and a third party lib to simplify integration, here.

http://stackoverflow.com/questions/22506531/how-to-perform-sql-like-operation-on-firebase

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何在firebase上执行sql“LIKE”操作?