如何创建具有动态更改的字段(例如#标签)和顺序的复合查询?
我正在使用Firestore实施以下操作:
创建了以下结构以容纳主题标签:
/items/{itemId}:
{
name: "My favorite chair",
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
hashtags: {
wooden: true,
red: true,
small: true
}
}
对于“小”,“红色”项目的查询将如下所示:
const userSuppliedKeywords = ['red', 'small'];
let ref = firebase.firestore().collection('items');
ref = userSuppliesKeywords.reduce(
(acc, key) => acc.where(`hashtags.${key}`, '==', true)
, ref
);
ref.orderBy('createdAt', 'desc').limit(20).get()....
由于使用orderBy,Firestore需要此搜索的索引。但这是不可行的,因为[hashtag.red,hashtag.small,createdAt]的索引对下一个查询没有用。
如何创建具有动态更改的字段和顺序的复合查询?
也许有更好的方法来处理标签,从而使最新的查询成为可能?
是否可能有第三方服务来帮助您?阿尔及利亚似乎只进行全文搜索。弹性文档很难确定它是否支持该用例。
另一种想法可能是使用带有井号标签排列的array属性,例如
['wooden', 'red', 'small', 'wooden-red', 'wooden-small', 'red-small',
'wooden-red-small']
然后可以索引此属性。根据Firestore限制,仅需要一个'array-contains'子句。但这会导致一些〜2 ^ n问题。
谢谢!