【问题标题】:Algolia search where string attribute matches a given string字符串属性与给定字符串匹配的 Algolia 搜索
【发布时间】:2018-06-06 22:22:21
【问题描述】:

我在algolia中有如下索引结构

我需要执行查询搜索,其中电子邮件属性与给定电子邮件地址匹配,即返回电子邮件属性与该电子邮件匹配的所有记录。我已经阅读了有关过滤和分面的信息,并且我也尝试在 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'

【问题讨论】:

    标签: algolia


    【解决方案1】:

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

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

    因此,使用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( ".","" ) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多