Parse.com поиск пользователя без регулярных выражений
У меня есть приложение, где у меня есть пользователи с именем пользователя и местом для их настоящего имени. Я также разрешаю пользователям запрашивать других пользователей. В настоящее время мой запрос выглядит так:
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:kCPUserName containsString:[searchText lowercaseString]];
PFQuery *userRealNameQuery = [PFUser query];
[usernameQuery whereKey:kCPUserFullName containsString: searchText];
PFQuery *userRealNameWithCapsQuery = [PFUser query];
[userRealNameWithCapsQuery whereKey:kCPUserFullName containsString:[searchText capitalizedString]];
PFQuery *userRealNameWithLowerQuery = [PFUser query];
[userRealNameWithLowerQuery whereKey:kCPUserFullName containsString:[searchText lowercaseString]];
PFQuery *finalQuery = [PFQuery orQueryWithSubqueries:@[userQuery, userRealNameQuery, userRealNameWithCapsQuery, userRealNameWithLowerQuery]];
Это прекрасно работает, возвращая список пользователей, которые могут соответствовать searchText. Однако мне стало известно, что containsString использует регулярные выражения, поэтому, если у меня много пользователей, выполняющих поиск одновременно, я быстро сталкиваюсь с ограничением 80 запросов регулярных выражений в минуту при разборе. Использование hasPrefix: также использует регулярные выражения. Единственный вопрос, о котором я могу подумать, - это использовать метод equalTo:, но это будет означать, что пользователь должен точно знать, кого он ищет, и как правильно писать свои имена (как пользовательские, так и реальные).
Какие-либо предложения?
1 ответ
Мое окончательное решение этой проблемы состояло в том, чтобы создать отдельное поле, назвав его комбинированным_имением Это поле представляет собой объединение реальных и пользовательских имен (все строчные). Затем я могу сделать один вызов регулярного выражения и получить те же результаты. Не удаляя все вызовы регулярных выражений, он переходит от 4 вызовов к 1.