У меня есть индекс около 100 тыс. Документов, которые представляют объект фильма.
Пользователи может помещать фильмы в различные списки (например, избранное и т. д.)
Эти списки хранятся в базе данных mysql и не индексируются в solr.
Я мог бы хранить идентификаторы пользователей в многозначных полях, представляющих список, но это довольно плохо, потому что поля будут очень, очень длинными, а индексация тоже будет проблематичной.
В настоящее время я делаю следующее (псевдокод):
$favorites = SELECT document_id FROM favorites WHERE user_id = $user_id
$documents = 'http://solr.com:8393/select/?q=XYZ&fq=document_id:('.join(' OR ',$favorites);
это работает отлично и быстро, но количество элементов в запросах фильтра ограничено 1024 (я пробовал). также фильтровать запросы складываются. поэтому, если у меня есть один фильтрующий запрос с 500 значениями для фильтрации, я могу иметь другие значения до 524 фильтров в другом поле.
На данный момент это нормально, потому что я ограничил количество записей в списке до 1024, а это довольно много, но я думаю, что это подход очень неуклюжий и приводит к большим накладным расходам.
Нет лучшего решения? Как написать модуль solr, который напрямую подключается к базе данных или что-то в этом роде? Я бы хотел сделать это на php.
Если другого выхода нет, могу ли я как-нибудь поднять лимит 1024? потому что теперь он работает очень быстро! Я думаю, что с хорошим оборудованием больше проблем не возникнет.
Изменить: как указано в комментариях, я публикую здесь свою исходную схему и рабочий пример запроса.
это мои дополнения к файлу schema.xml по умолчанию
пример результатов поиска можно просмотреть здесь .
пример запроса будет выглядеть так:
http://my-server.com:8983/solr/select/?
q=description:nazis
&fq=product_bluray:amazon
&fq=film_id:(1185616 1054606 88763 361748 78748)
здесь пользователь будет искать фильмы которые:
, список включает фильмы (документы) с идентификаторами 1185616 1054606 88763 361748 78748 и хранятся в базе данных mysql.
ps: Я не знаю, правильно ли я сформулировал вопрос, надеюсь, его можно понять. В противном случае отредактируйте!