2014-05-11 4 views
7

Ich bin mit Apache Solr für die passende Funktionalität meiner Webapp, und ich stieß auf ein Problem dieses Szenarios:Solr-Abfrage für verschachtelten/relationalen Datenabgleich

ich drei Programmierer bekam, die Geschicklichkeit Feld ihre Fähigkeiten sind, „Gewicht“ bedeutet, wie gut, dass Fähigkeit, die er/sie hat:

{ 
    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} 
    ] 
} 

und ich habe einen Job sucht für Programmierer:

{ 
    name: "webapp development", 
    skillRequired: [ 
     {name: "java", weight: 85}, 
     {name: "oracle", weight: 85}, 
    ] 
} 

ich möchte die „skillRequired“ Job diejenigen anzupassen Programmierer (um die besten Leute für den Job zu finden). In diesem Fall sollte es John und Bob sein, Sam wurde rausgeschmissen, weil seine Fähigkeiten in Java und Orakel nicht gut genug sind. und John sollte höher liegen als Bob, weil er Orakel besser kennt.

Problem ist, solr nicht Index-Objekt verschachtelt kann, das beste Format glaube ich ist zu erreichen:

name: "John", 
skill-name: ["java", "oracle", "linux"], 
skill-weight: [90, 90, 70] 

und so weiter. Ich weiß also nicht, ob das möglich ist, um eine Abfrage zu erstellen, damit dieses Szenario funktioniert.

Gibt es eine bessere Schema-Struktur dafür? oder mit Index/Abfrage Zeit Boost?

Ich lese fast alle der Solr Wiki und google um ohne Glück, irgendwelche Tipps und Workaround ist willkommen.

Problem gelöst, Melden Sie meine Lösung hier, um Hilfe:

1. Mein Datenformat JSON ist, so brauche ich solr-4.8.0 für die Unterstützung Index verschachtelt Daten mit json. Wenn es sich bei den Daten um ein XML-Format handelt, funktioniert solr-4.7.2 weiterhin.

2., solr-4.8.0 benötigen Java7-U55 (offizielle empfohlen)

3., verschachtelte Dokument/Objekt eingereicht werden, sollten mit "childDocuments" Schlüssel zum Solr. und um den Typ des Eltern/Kind-Dokuments zu identifizieren, füge ich hinzu und "Typ" Feld. so mit dem obigen Beispiel, so scheint es wie folgt aus:

{ 
     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., nach einreichen und solr begehen, kann ich den Job mit Block übereinstimmen Abfrage (in Filterabfrage) beitreten:

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 *] 
+1

Könnten Sie bitte schema.xml für diesen speziellen Fall bereitstellen? – frankie

+0

Mussten Sie das _ root _ -Feld zu Ihrem Schema hinzufügen? Ich folgte den Richtlinien von http://yonik.com/solr-nested-objects/, und bevor ich ein verschachteltes Dokument hinzufügte, musste ich das Schema aktualisieren: $ curl http: // localhost: 8983/solr/nested_demo/schema -X POST -H 'Inhaltstyp: application/json' --data-binary '{ "add-field": { "name": "_ root _", "type": "string", "indiziert": true, "gespeichert": false } } ' – alisa

+0

Können Sie bitte Schema bereitstellen? Wie haben Sie dieses Feld im Schema deklariert? –

Antwort

3

Sie kann BlockJoinQuery versuchen. Refer here

+1

Schön! Sehr nützlicher Hinweis!und ich finde es hier endlich mein Problem gelöst: http://heliosearch.org/solr-4-8-features/ –

+1

Die Seite ist nicht erreichbar! Können Sie bitte Ihre Antwort aktualisieren? @ HetfieldJoe –

+0

@TimLong Link funktioniert gut für mich. Bitte versuchen Sie es erneut. Sie können auch nach Block-Join-Abfrage googlen. Eine weitere Ressource ist http://yonik.com/solr-nested-objects/ – sidgate

Verwandte Themen