我在algolia中有以下索引结构
我需要执行查询搜索,其中email属性与给定的电子邮件地址匹配,即返回电子邮件属性与该电子邮件匹配的所有记录。我已经阅读了关于过滤和分面的内容,我也尝试在android中应用它,但它没有进行我需要的过滤。
// Init Algolia.
MainActivity.index = MainActivity.client.getIndex( "recsD" );
// Pre-build query.
query = new Query();
query.setFacets( "email:"+ FirebaseAuth.getInstance().getCurrentUser().getEmail().replace( ".","" ) );
//query.setFilters( "email:"+ FirebaseAuth.getInstance().getCurrentUser().getEmail().replace( ".","" ) );
query.setAttributesToRetrieve( "Note", "date", "time", "audio", "uid" );
query.setAttributesToHighlight( "Note" );
query.setHitsPerPage( HITS_PER_PAGE );
通过上述代码,我可以获取所有结果,包括电子邮件地址不匹配的结果。我做得对的是什么?我怎样才能实现像
这样的东西SELECT * FROM recsD WHERE email='lilsaimo@gmailcom'
答案 0 :(得分:6)
您的问题来自使用setFacets
而不是setFilters
。在方面上引用Algolia的文档:
急需检索。如果未指定或为空,则不会检索任何构面。特殊值*可用于检索所有构面。
因此,使用setFacets("foo", "bar")
将要求Algolia引擎在结果中返回构面“ foo”和“ bar”的构面值。仅此一项就不会做任何过滤!
如果要过滤结果以仅保留与foo=bar
匹配的结果,则应:
设置过滤器filters="foo:bar"
,如filters documentation下的facet filters
回到您的android代码,您应该尝试:
// Pre-build query.
query = new Query();
query.setFacets("email");
query.setFilters( "email:"+ FirebaseAuth.getInstance().getCurrentUser().getEmail().replace( ".","" ) );