Можно ли запросить несколько полей, содержащих список строковых значений (Realm Java)

Я пытаюсь запросить несколько полей одновременно, который содержит список строковых значений в Realm. Допустим, у меня есть следующий объект:

public class Article extends RealmObject implements Serializable{
    @PrimaryKey
    @Required
    private String aID = UUID.randomUUID().toString();

    private String title;
    private String description;
    private String authors;
    private RealmList<Tag> tags;
}

Я хотел бы запросить все статьи, какой заголовок, описание или теги содержат список строк.

Я знаю, что предикат "in" можно использовать для сопоставления списка значений с полем следующим образом:

realm.where(Article.class)
    .in("title", listOfValues,Case.INSENSITIVE)
    .or()
    .in("description", listOfValues, Case.INSENSITIVE)
    .or()
    .in("tags.tag",listOfValues, Case.INSENSITIVE)
    .findAll();

Это будет возвращать только "совпадающие" значения, но я ищу "содержащие" значения. Существует также предикат "содержит", но я думаю, что его можно сравнить только с одним значением.

Есть какой-либо способ сделать это?

2 ответа

Решение

Обходной путь для решения этого вопроса, как предложила @EpicPandaForce в своем комментарии, итерирует и использует. Вот код для этого:

 RealmResults<Article> newResults;
 RealmQuery<Article> where = r.where(Article.class).beginGroup();
 for (String keyword : keywords) {
     where = where.contains("name", keyword, Case.INSENSITIVE)
             .or()
             .contains("description", keyword, Case.INSENSITIVE)
             .or()
             .equalTo("tags.tag", keyword, Case.INSENSITIVE);
 }

 newResults = where.endGroup().findAll();

Более простой ответ - использовать напрямую .contains (к сожалению, это не объясняется в царстве Java документ).

realm.where(Article.class) 
    .contains("title", listOfValues, Case.INSENSITIVE)
    .or()
    .contains("description", listOfValues, Case.INSENSITIVE)
    .or()
    .contains("tags.tag",listOfValues, Case.INSENSITIVE)
    .findAll();

Из кода Realm-Java вы можете найти 2 метода:

public RealmQuery<E> contains(String fieldName, String value);
public RealmQuery<E> contains(String fieldName, String value, Case casing);
Другие вопросы по тегам