Algolia 搜索字符串属性与给定字符串匹配的位置
Algolia search where string attribute matches a given string
我在 algolia 中有以下索引结构
我需要执行查询搜索,其中电子邮件属性与给定的电子邮件地址相匹配,即 return 电子邮件属性与该电子邮件匹配的所有记录。我已经阅读了有关过滤和分面的内容,并且我也尝试在 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'
您的问题来自使用 setFacets
而不是 setFilters
。引用 Algolia 关于 facets:
的文档
Facets to retrieve. If not specified or empty, no facets are retrieved. The special value * may be used to retrieve all facets.
因此使用 setFacets("foo", "bar")
将要求 Algolia 引擎在结果中 return 方面 "foo" 和 "bar" 的方面值。仅此一项不会进行任何过滤!
如果您想要过滤结果以仅保留与 foo=bar
匹配的结果,您应该:
在 foo
属性上启用分面,either in the settings or for this query
设置过滤器filters="foo:bar"
,如图filters documentation under facet filters
回到您的 android 代码,您应该尝试:
// Pre-build query.
query = new Query();
query.setFacets("email");
query.setFilters( "email:"+ FirebaseAuth.getInstance().getCurrentUser().getEmail().replace( ".","" ) );
我在 algolia 中有以下索引结构
我需要执行查询搜索,其中电子邮件属性与给定的电子邮件地址相匹配,即 return 电子邮件属性与该电子邮件匹配的所有记录。我已经阅读了有关过滤和分面的内容,并且我也尝试在 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'
您的问题来自使用 setFacets
而不是 setFilters
。引用 Algolia 关于 facets:
Facets to retrieve. If not specified or empty, no facets are retrieved. The special value * may be used to retrieve all facets.
因此使用 setFacets("foo", "bar")
将要求 Algolia 引擎在结果中 return 方面 "foo" 和 "bar" 的方面值。仅此一项不会进行任何过滤!
如果您想要过滤结果以仅保留与 foo=bar
匹配的结果,您应该:
在
foo
属性上启用分面,either in the settings or for this query设置过滤器
filters="foo:bar"
,如图filters documentation under facet filters
回到您的 android 代码,您应该尝试:
// Pre-build query.
query = new Query();
query.setFacets("email");
query.setFilters( "email:"+ FirebaseAuth.getInstance().getCurrentUser().getEmail().replace( ".","" ) );