【发布时间】:2011-11-03 20:45:50
【问题描述】:
我一直在四处寻找如何将 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 遍历每个文档并:
- 获取文档的id
- 从 MongoDB 中获取具有相同 id 的对象,以便能够从那里检索属性
4- 删除时,我还没有完成那部分,也不确定如何在 Java 中完成
那么对于此处描述的每个场景,有人对如何以更有效的方式执行此操作有建议吗?喜欢在 Solr 中拥有大量文档并一次添加一个文档时不需要 1 小时即可重建索引的过程?我的要求是用户可能希望多次添加一个文档,我希望他们能够在之后立即检索它
【问题讨论】:
-
每个文档有多大以及要索引的属性?
-
@JustinThomas - 每个文档可以有大约 10 个属性,其中一些可能是很长的描述,我想索引描述的全文搜索,只是精确匹配其他的.这能回答你的问题吗?