Поиск в Алголии, где строковый атрибут соответствует заданной строке - PullRequest
0 голосов
/ 07 июня 2018

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

enter image description here

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

1 Ответ

0 голосов
/ 21 июня 2018

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

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

Таким образом, использование 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( ".","" ) );
...