我使用Apache Solr實現我的web應用程序的匹配功能,並且我遇到這種情況的一個問題:Solr的查詢匹配嵌套/關係型數據
我有三個程序員,技能領域是他們的技能, 「重量」是指技能有多好,他/她:
{
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}
]
}
4,提交後並提交到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 *]
請問您能否爲這個特殊情況提供schema.xml? – frankie
您是否必須將_ root _字段添加到您的模式中?我遵循http://yonik.com/solr-nested-objects/的指導方針,在添加嵌套文檔之前,我必須更新模式:$ curl http:// localhost:8983/solr/nested_demo/schema -X POST -H'Content-type:application/json'--data-binary'「add-field」:{ 「name」:「_ root _」, 「type」:「string」, 「indexed」:true, 「stored」:false } }' – alisa
您能否提供架構?你是如何在模式中聲明這個字段的? –