java - Производительность MongoDB + Solr

Я много искал, как использовать 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 Я просматриваю каждый документ и:

  1. получаю идентификатор документа
  2. получаю объект из MongoDB с таким же идентификатором, чтобы иметь возможность извлекать свойства оттуда

4- Когда удаление, ну, я еще не сделал эту часть и не совсем уверен, как это сделать на Java

. Итак, у кого-нибудь есть предложения, как сделать это более эффективными способами для каждого из описанных здесь сценариев? как процесс, чтобы сделать это таким образом, чтобы не потребовалось 1 час, чтобы перестроить индекс при наличии большого количества документов в Solr и добавлении одного документа за раз? мои требования заключаются в том, что пользователи могут захотеть добавлять по одному документу, много раз, и я бы хотел, чтобы они могли получить его сразу после

25
задан Guillaume 25 August 2011 в 16:23
поделиться

1 ответ

  1. Вы также можете ждать больше документов и индексировать их только каждые X минут. (Конечно, это сильно зависит от вашего приложения и требований)

  2. Если ваши документы маленькие и вам не нужны все данные (которые хранятся в MongoDB), вы можете поместить только нужное поле в документе Solr, сохраняя их, но не индексируя

<field name="nameoyourfield" type="stringOrAnyTypeYouuse" проиндексировано ="false" сохранено ="true"/>

1
ответ дан 28 November 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: