我想添加一个简单的搜索字段,想使用类似的东西
collectionRef.where('name', 'contains', 'searchTerm')
我尝试过使用where('name', '==', '%searchTerm%'),但它没有返回任何东西.
我正在尝试在Firestore集合上按模式执行过滤器。例如,在我的Firestore数据库中,我有一个名为的品牌adidas。用户将具有搜索输入,其中键入“ adi”,“ adid”,“ adida”或“ adidas”将返回adidas文档。我指出了几种解决方案:
1.获取所有文档并执行前端过滤器
var brands = db.collection("brands");
filteredBrands = brands.filter((br) => br.name.includes("pattern"));
Run Code Online (Sandbox Code Playgroud)
由于Firestore的价格,该解决方案显然不是一个选择。此外,如果文档数量很多,执行请求可能会很长。
2.使用Elasticsearch或Algolia
这可能很有趣。但是,我认为将这些解决方案的支持仅用于模式搜索会有些过头,而且这很快就会变得昂贵。
3. searchName创建对象时的自定义字段
因此,我有了以下解决方案:在创建文档时,创建一个包含一系列可能的搜索模式的字段:
{
...
"name":"adidas",
"searchNames":[
"adi",
"adida",
"adidas"
],
...
}
Run Code Online (Sandbox Code Playgroud)
这样就可以使用来访问文档:
filteredBrands = db.collection("brands").where("searchNames", "array-contains", "pattern");
Run Code Online (Sandbox Code Playgroud)
所以我有几个问题: