Я много искал, как использовать MongoDB в сочетании с Solr, и на некоторые вопросы здесь есть частичные ответы, но ничего конкретного (больше похоже на теории). В моем приложении у меня будет много-много документов, хранящихся в MongoDB (возможно, до нескольких сотен миллионов), и я хочу реализовать полнотекстовый поиск по некоторым свойствам этих документов, поэтому я думаю, что Solr - лучший способ сделать это.
Я хочу знать, как мне настроить / выполнить все, чтобы все было хорошо? прямо сейчас, вот что я делаю (и знаю, что это не оптимально):
1- При вставке объекта в MongoDB я затем добавляю его в Solr
SolrServer server = getServer();
SolrInputDocument document = new SolrInputDocument();
document.addField("id", documentId);
...
server.add(document);
server.commit();
2- При обновлении свойства объекта, поскольку Solr не может обновить только одно поле, сначала я извлекаю объект из MongoDB, затем обновляю индекс Solr со всеми свойствами из объекта и новыми и делаю что-то вроде
StreamingUpdateSolrServer update = new StreamingUpdateSolrServer(url, 1, 0);
SolrInputDocument document = new SolrInputDocument();
document.addField("id", documentId);
...
update.add(document);
update.commit();
3- При запросе сначала я запрашиваю Solr, а затем при получении списка документов SolrDocumentList
Я просматриваю каждый документ и:
4- Когда удаление, ну, я еще не сделал эту часть и не совсем уверен, как это сделать на Java
. Итак, у кого-нибудь есть предложения, как сделать это более эффективными способами для каждого из описанных здесь сценариев? как процесс, чтобы сделать это таким образом, чтобы не потребовалось 1 час, чтобы перестроить индекс при наличии большого количества документов в Solr и добавлении одного документа за раз? мои требования заключаются в том, что пользователи могут захотеть добавлять по одному документу, много раз, и я бы хотел, чтобы они могли получить его сразу после
Вы также можете ждать больше документов и индексировать их только каждые X минут. (Конечно, это сильно зависит от вашего приложения и требований)
Если ваши документы маленькие и вам не нужны все данные (которые хранятся в MongoDB), вы можете поместить только нужное поле в документе Solr, сохраняя их, но не индексируя
<field name="nameoyourfield" type="stringOrAnyTypeYouuse"
проиндексировано ="false"
сохранено ="true"/>