mysql — Поиск подписчиков пользователя по имени пользователя и поиску имени с помощью SOLR & amp; Переполнение стека

Я пытаюсь создать поле ввода, которое при вводе будет искать пользователей, которые следуют за вами, на основе введенного имени пользователя и / или имени.

Я пытаюсь использовать SOLR, потому что это быстро, и я не могу использовать функцию MySQL LIKE, но у меня возникают проблемы с количеством значений, которые я могу передать в запрос SOLR (например, user_id:(1,2,3,5,etc)). SOLR, очевидно, имеет ограничение на число значений, которые вы можете передать, и мне нужно, чтобы это решение не было ограничено.

На данный момент мой индекс SOLR включает в себя username, name, а также user_id, Я тогда передавал список ранее собранных follower_ids на запрос.

Любые идеи о том, как сделать эту работу?

ОБНОВЛЕНИЕ: Как было предложено в комментариях по увеличению количества предложений ИЛИ … это действительно не очень хорошее решение, так как это вызовет будущие проблемы.

0

Решение

У меня была такая же проблема исключения из слишком большого числа логических выражений в solr.
У меня были acl-идентификаторы (список контроля доступа), которые находятся в большем количестве, поэтому запрос становится слишком длинным.

Шаги, которые я предпринял, чтобы преодолеть проблему,

  1. Увеличение maxBooleanCLauses

  2. Использовал в фильтре запрос как &fq = acl: (id1 или id2 …)

  3. Если счетчик acl больше 8000, тогда я отправляю несколько запросов с логикой ниже

StringBuilder queryString = new StringBuilder (5000);
if (acls.length> 8000) {
Integer aclCounter = 0;
long requestCnt = Math.round (Math.ceil ((acls.length / 8000.0)));
для (int i = 0; i < requestCnt; я ++)
{
queryString = new StringBuilder (acls.length * 10);
queryString.append (»&FQ = 🙁 ACL «);
для (int j = 0; j < 8000 && aclCounter < acls.length; aclCounter ++, j ++)
{
queryString.append (ACL [aclCounter]) добавление (APPEND_OR).
} queryString.replace (queryString.length () — 4, queryString.length (), «)»);
}
}

Я надеюсь, что это дало бы идею решить вашу проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]