Join 用于匹配嵌套/关系数据的Solr查询

Join 用于匹配嵌套/关系数据的Solr查询,join,solr,solr4,Join,Solr,Solr4,我正在使用apache solr实现我的webapp的匹配功能,我遇到了这种情况下的一个问题: 我有三个程序员,技能领域是他们的技能,“权重”表示他/她有多好的技能: { name: "John", skill: [ {name: "java", weight: 90}, {name: "oracle", weight: 90}, {name: "linux", weight: 70} ] }, { name: "S

我正在使用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},
    ]
}
我想用这份工作的“技能要求”来匹配那些程序员(找到最适合这份工作的人)。在这种情况下,应该是John和Bob,Sam被解雇是因为他的java和oracle技能不够好。约翰应该比鲍勃得分高,因为他更了解甲骨文

问题是,solr无法为嵌套对象编制索引,我认为我能得到的最佳格式是:

name: "John",
skill-name: ["java", "oracle", "linux"],
skill-weight: [90, 90, 70]
等等。所以我不知道是否可以构造一个查询来让这个场景正常工作

有更好的模式结构吗?还是使用索引/查询时间提升

我阅读了几乎所有的solr wiki和google around,但运气不佳,欢迎提供任何提示和解决方法

问题已解决,请在此处记录我的解决方案以获取帮助:

首先,我的数据格式是json,所以我需要solr-4.8.0来支持json的索引嵌套数据。如果数据是xml格式,solr-4.7.2仍然有效

第二,solr-4.8.0需要java7-u55(官方推荐)

第三,嵌套文档/对象应使用“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后,我可以使用块连接查询(在筛选器查询中)匹配作业:


您可以尝试BlockJoinQuery

很好!非常有用的线索!我发现它终于解决了我的问题:网站无法访问!你能更新你的答案吗@HetfieldJoe@TimLong林克对我来说很好。请再试一次。你也可以用谷歌搜索块连接查询。另一个资源是@TimLong,到今天为止,您可能想看看更新的Solr5.3特性:您能为这个特殊情况提供schema.xml吗?您必须将uroot u文件添加到您的模式中吗?我遵循了来自的指导原则,在添加嵌套文档之前,我必须更新模式:$curl-xpost-H'内容类型:application/json'--数据二进制'{“add field”:{“name”:“{root}”,“type”:“string”,“indexed”:true,“stored”:false}您能提供模式吗?您是如何在schema中声明此字段的?@PratikPatel抱歉,我很久以前就离开了那家公司,所有的知识都留在那里了。也许你可以试试弹性搜索?这似乎更受欢迎。
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 *]