- 此问题在此处已有答案**:
Firebase "like" search on string [duplicate](1个答案)
How to perform sql "LIKE" operation on firebase?(5个答案)
2天前关闭。
这是我在firebase数据库中搜索的代码,但它只从一开始搜索,而不是在两者之间。
private void processSearch(String query) {
Query query1 = databaseReference.child("posts").orderByChild("bookName").startAt(query).endAt(query+"\uf8ff");
query1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
AllPostItemHelper itemHelper = dataSnapshot.getValue(AllPostItemHelper.class);
itemHelper.setPostId(dataSnapshot.getKey());
allPostItemSearch.add(itemHelper);
}
AllPostItemAdapter allPostItemAdapter = new AllPostItemAdapter(allPostItemSearch,getContext());
postThings.setAdapter(allPostItemAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
1条答案
按热度按时间xyhw6mcr1#
仅从开始搜索,而不是在中间搜索
这是预期行为,因为您正在执行对Query#startAt()的调用,该调用:
使用给定的orderBy指令或priority作为默认值,创建一个查询,该查询被约束为仅返回值大于或等于给定值的子节点。
但是,如果您需要搜索子字符串,请注意这是不可能的。您只能执行匹配以特定字符串或以字符串范围开头的字符串的查询。
如果你想下载整个节点来搜索客户端的字段,请注意这个解决方案根本不实用。要启用Firebase实时数据库数据的全文搜索,我建议你使用第三方搜索服务,如Algolia或Elasticsearch。
如果您考虑在某个时间点尝试使用Cloud Firestore,请参见以下示例:
要了解它如何以相同的方式与Cloud Firestore一起使用,您可以将其与Firebase实时数据库一起使用。