PFQuery возвращает объекты, где отношение объекта соответствует всем условиям

Работая над приложением для iPhone с бэкэндом Parse DB, я пытаюсь реализовать функцию поиска с помощью поисковых токенов. Я прочитал официальные документы Parse по масштабируемому поиску, отношениям и указателям, документации, различным обсуждениям SO/Parse.com и т. д. - к сожалению, не смог найти ничего похожего на мою проблему.

Я использую класс SearchToken, в котором я храню уникальные продезинфицированные токены, и у меня есть PFRelation *tokenRelation в связанном классе Article (каждая статья может иметь несколько поисковых токенов; каждый токен может быть связан с несколькими статьи).

Я пытаюсь сформировать запрос, который находит все объекты из класса Article, содержащие все искомые токены (например, @"token1", @"token2"). К сожалению, whereKey:containsAllObjectsInArray: не работает с атрибутами PFRelation, что еще больше усложняет мне задачу.

Простым вариантом было бы преобразовать этот атрибут PFRelation в массив указателей, но я знаю, что количество связанных токенов может превышать везде упоминаемый предел в 100 объектов, поэтому я немного колеблюсь здесь.

Мой вопрос: есть ли другой способ запроса объектов, соответствующих всем условиям в связанных объектах (через PFRelation), или есть ли лучший способ реализации функции токенизированного поиска?


person David Jirman    schedule 29.06.2015    source источник


Ответы (1)


Я бы использовал массив указателей, поскольку предполагаю, что для одной статьи можно установить максимальное количество токенов. (Насколько мне известно, ограничение составляет 1 тыс. Parse Docs) Parse говорит, что это имеет смысл, если вы знаете максимальное число (например, почтовые индексы). См. раздел отношения в анализе.

Если массив указателей не является для вас возможным решением, я бы решил отношение n:m с вашим собственным классом (например, HasToken или TokenRelationship) вместо PFRelation (или массива указателей).

@interface TokenRelationship : PFObject <PFSubclassing>
@property (nonatomic, strong) Article article;
@property (nonatomic, strong) SearchToken searchToken;
@end

Затем выполните запрос к TokenRelationship с подзапросом, используя whereKey:matchesQuery:.

Тем не менее, вы можете достичь предела в 1k. Таким образом, оба решения имеют свои пределы. Я надеюсь, что синтаксический анализ вводит ограничения для указателей внешнего ключа, такие как: whereKey:@"searchToken.tokenString" equalTo:@"token1", или они устраняют ограничение в 1 КБ для подзапросов/внутренних запросов. В противном случае запрос отношения n:m, вероятно, превысит лимит.

person cakl    schedule 07.07.2015