Я много осматривался, чтобы понять, как использовать MongoDB в сочетании с Solr, и некоторые вопросы здесь имеют частичные ответы, но ничего конкретного (больше как теории).В моем приложении у меня будет много-много документов, хранящихся в MongoDB (может быть, до нескольких сотен миллионов), и я хочу реализовать полнотекстовый поиск по некоторым свойствам этих документов, поэтому я полагаю, что Solr - лучший способ сделать это.this.
То, что я хочу знать, - это как мне все настроить / выполнить так, чтобы он имел хорошие характеристики?прямо сейчас, вот что я делаю (и я знаю, что это не оптимально):
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 и добавлении одного документа за раз?Мои требования заключаются в том, чтобы пользователи могли добавлять один документ за раз, много раз, и я бы хотел, чтобы они могли получить его сразу после