Поиск Алголии, где строковый атрибут соответствует заданной строке

У меня есть следующая структура индекса в алголии

введите здесь описание изображения

Мне нужно выполнить поиск запроса, где атрибут электронной почты соответствует заданному адресу электронной почты, т.е. вернуть все записи, в которых атрибут электронной почты будет соответствовать этому электронному письму. Я читал о фильтрации и фасетировании, а также пытался применить его в 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'

person MbaiMburu    schedule 06.06.2018    source источник


Ответы (1)


Ваша проблема связана с использованием setFacets вместо setFilters. Цитата из документации Algolia по фасетам:

Фасеты для извлечения. Если не указано или пусто, фасеты не извлекаются. Специальное значение * может использоваться для получения всех фасетов.

Таким образом, использование setFacets("foo", "bar") попросит движок Algolia вернуть в результатах значения фасета для фасета "foo" и "bar". Само по себе это не будет фильтровать!

Если вы хотите отфильтровать результаты, чтобы оставить только те, которые соответствуют foo=bar, вам следует:

Возвращаясь к вашему коду Android, вам следует попробовать:

// Pre-build query.
query = new Query();
query.setFacets("email");
query.setFilters( "email:"+ FirebaseAuth.getInstance().getCurrentUser().getEmail().replace( ".","" ) );
person PLNech    schedule 21.06.2018