Я много оглядывался, чтобы посмотреть, как использовать 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
просматриваю каждый документ и:
- получить идентификатор документа
- получить объект от MongoDB с тем же идентификатором, чтобы иметь возможность извлекать из него свойства
4- При удалении, я еще не сделал эту часть и не совсем уверен, как это сделать в Java
У кого-нибудь есть предложения по тому, как это сделать более эффективным образом для каждого из описанных здесь сценариев? как процесс сделать это так, чтобы не потребовалось 1 часа для восстановления индекса при наличии большого количества документов в Solr и добавления одного документа за раз? мои требования здесь состоят в том, что пользователи могут захотеть добавить один документ за раз, много раз, и я бы хотел, чтобы они могли получить его сразу после