Лучший способ отфильтровать поля, хранящиеся в удаленной базе данных в solr / lucene?

У меня есть индекс около 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)

здесь пользователь будет искать фильмы которые:

  • доступны на Amazon как bluray
  • , в описании которых есть термин «нацисты»
  • И которые находятся в его любимом списке

, список включает фильмы (документы) с идентификаторами 1185616 1054606 88763 361748 78748 и хранятся в базе данных mysql.

ps: Я не знаю, правильно ли я сформулировал вопрос, надеюсь, его можно понять. В противном случае отредактируйте!

8
задан marc_s 13 February 2016 в 10:45
поделиться