Algolia搜索字符串属性与给定字符串匹配的位置

Mba*_*uru 1 algolia

我在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 );
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我可以获取所有结果,包括电子邮件地址不匹配的结果.我做得对的是什么?我怎样才能实现这样的目标

SELECT * FROM recsD WHERE email='lilsaimo@gmailcom'
Run Code Online (Sandbox Code Playgroud)

PLN*_*ech 6

您的问题来自于使用setFacets而不是setFilters.引用Algolia关于方面的文档:

要检索的方面.如果未指定或为空,则不检索构面.特殊值*可用于检索所有方面.

因此,使用setFacets("foo", "bar")将要求Algolia引擎在结果中返回facet"foo"和"bar"的facet值.仅此一项不会进行任何过滤!

如果您想过滤结果只保留匹配的结果foo=bar,您应该:

回到你的Android代码,你应该尝试:

// Pre-build query.
query = new Query();
query.setFacets("email");
query.setFilters( "email:"+ FirebaseAuth.getInstance().getCurrentUser().getEmail().replace( ".","" ) );
Run Code Online (Sandbox Code Playgroud)