java - MongoDB Solr 搜索以在单个搜索请求中获取文档关系

标签 java mongodb solr

我在 mongodb 中有两个或多个集合,它们使用 mongo-solr 连接器复制到 solr 索引。为了解释我面临的问题,让我们以员工和部门示例的传统示例为例(我知道它是面向文档的数据库,我可以将部门嵌入到员工文档中,但请允许我用这个简单的示例来解释我的问题):

员工文件:

{
   "_id": ObjectId(..),
   "firstName": "John",
   "lastName": "David",
   "departMent": ObjectId(..) - a DBRef for department document
}

部门文件:

{
  "_id": ObjectId(..),
  "departmentName": "Marketing"
}

假设以上两个文档在员工文档中使用部门的对象 ID ref 链接。现在 mongo-solr 连接器按原样复制了这些结构,让我们假设所有字段都已编制索引并存储。

现在这是我的问题(&问题所在):

如果我按员工名字(或姓氏)搜索 solr 索引,我应该以这样的方式返回结果,即 solr 搜索响应应包含“departmentName”而不是 Department ObjectId 引用,并且这应该发生在来自客户端的单个搜索请求。

如何使用 Solr api 执行此操作?

提前致谢。

最佳答案

当然(从 Solr 的角度来看)理想的解决方案是以非规范化形式将数据存储在 Solr 中。但是,如果这不是一个可行的选择,您可以查看 Join query Parser。

https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-JoinQueryParser

您将按照(未测试)的方式执行查询:

q={!join from=department to=departmentName}lastName:David AND departmentName:Marketing

关于java - MongoDB Solr 搜索以在单个搜索请求中获取文档关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30092497/

相关文章:

java - 文件未上传到 Android 服务器上

java - Spring mongo 只写字段

ruby - `require' : cannot load such file -- mongo (LoadError)

c# - MongoDb C# 驱动程序 - 基于 "candidate"键更新插入许多内容

java - 如何使用Solr的DirectUpdateHandler2正确回滚提交?

java - IntelliJ : Maven: Build Artifact to Jar but cant execute jar

java - 如何从 JMS 消息组取消注册而不杀死整个消费者 (ActiveMQ)

solr - 如何使用 Solr 的 FileListEntityProcessor 在搜索结果中显示文件名

unit-testing - 通过嵌入式服务器测试 Solr

java - 我不知道在哪里放置循环