Solr查询匹配嵌套/关系数据
我使用apache solr来实现我的webapp的匹配功能,并且遇到了这种情况的问题:
我有三个程序员,技能领域是他们的技能,“体重”意味着他/她具备的技能有多好:
{
name: "John",
skill: [
{name: "java", weight: 90},
{name: "oracle", weight: 90},
{name: "linux", weight: 70}
]
},
{
name: "Sam",
skill: [
{name: "C#", weight: 98},
{name: "java", weight: 75},
{name: "oracle", weight: 70},
{name: "tomcat", weight: 70},
]
},
{
name: "Bob",
skill: [
{name: "oracle", weight: 90},
{name: "java", weight: 85}
]
}
我有一份工作寻找程序员的工作:
{
name: "webapp development",
skillRequired: [
{name: "java", weight: 85},
{name: "oracle", weight: 85},
]
}
我希望使用该职位的“skillRequired”来匹配那些程序员(以找到最适合工作的人)。 在这种情况下,应该是John和Bob,Sam因为他的java和oracle技能不够好而被踢掉了。 约翰得分高于鲍勃,因为他更了解甲骨文。
问题是,solr不能索引嵌套对象,我想我能得到的最佳格式是:
name: "John",
skill-name: ["java", "oracle", "linux"],
skill-weight: [90, 90, 70]
等等。 所以我不知道是否可以构建一个查询来获得这个场景的工作。
有更好的模式结构吗? 或使用索引/查询时间提升?
我几乎读了几乎所有的solr wiki和google,没有运气,欢迎提供任何提示和解决方法。
问题解决了,请在这里登录我的解决方案寻求帮助
1,我的数据格式是json,所以我需要solr-4.8.0来支持json的索引嵌套数据。 如果数据是xml格式,solr-4.7.2仍然有效。
2,solr-4.8.0需要java7-u55(官方推荐)
3,嵌套的文档/对象应该用“childDocuments”键提交给solr。 为了识别父/子文档的类型,我添加了“type”字段。 所以在上面的例子中,它看起来像这样:
{
type: "programmer",
name: "John",
_childDocuments_: [
{type:"skill", name: "java", weight: 90},
{type:"skill", name: "oracle", weight: 90},
{type:"skill", name: "linux", weight: 70}
]
},
{
type: "programmer",
name: "Sam",
_childDocuments_: [
{type:"skill",name: "C#", weight: 98},
{type:"skill", name: "java", weight: 75},
{type:"skill", name: "oracle", weight: 70},
{type:"skill", name: "tomcat", weight: 70},
]
},
{
type: "programmer",
name: "Bob",
_childDocuments_: [
{type:"skill", name: "oracle", weight: 90},
{type:"skill", name: "java", weight: 85}
]
}
第四,在提交并提交solr后,我可以使用块连接查询(在过滤器查询中)匹配作业:
fq={!parent which='type:programmer'}type:skill AND name:java AND weight:[85 TO *]&
fq={!parent which='type:programmer'}type:skill AND name:oracle AND weight:[85 TO *]
你可以尝试BlockJoinQuery。 请参阅此处
链接地址: http://www.djcxy.com/p/20455.html