2014-05-11 11 views
7

sto usando Apache Solr per la funzionalità corrispondenza della mia webapp, e ho riscontrato un problema di questo scenario:interrogazione Solr per la corrispondenza dei dati nidificate/relazionale

ho avuto tre programmatore, il campo di abilità sono le loro competenze, "peso" significa quanto bene quell'abilità lui/lei ha:

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

e ho un lavoro in cerca di programmatore:

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

voglio usare il proprio lavoro "skillRequired" per corrispondere a quelli programmatore (per trovare i migliori ragazzi per il lavoro). In questo caso, dovrebbe essere John e Bob, Sam è stato espulso perché la sua abilità java e oracle non è abbastanza buona. e John dovrebbe avere punteggi più alti di quelli di Bob, perché conosce meglio l'oracolo.

problema è, non può solr indice oggetto annidati, il miglior formato penso di poter ottenere è:

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

e così via. quindi non so se è possibile costruire una query per far funzionare questo scenario.

Esiste una struttura di schema migliore per questo? o usando l'indice/query time boost?

Ho letto quasi tutto il wiki del solr e google in giro senza fortuna, eventuali suggerimenti e soluzioni sono ben accetti.

Problema risolto, Log mia soluzione qui per aiuto:

prima, mio ​​formato di dati è JSON, quindi ho bisogno solr-4.8.0 per indice supporto dati nidificate con JSON. se i dati erano in formato xml, solr-4.7.2 funziona ancora.

2nd, solr-4.8.0 bisogno Java7-U55 (ufficiale consigliato)

3rd, documento nidificato/oggetto dovrebbe presentato al Solr con "childDocuments" chiave. e per identificare il tipo di documento genitore/figlio, aggiungo e "digito" il campo. Quindi, con l'esempio precedente, sembra che questo:

{ 
     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 °, dopo presentare e si impegnano a solr, posso abbinare il lavoro con il blocco unirsi query (nella query filtro):

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

potresti, per favore, fornire schema.xml per questo caso particolare? – frankie

+0

Hai dovuto aggiungere _ root _ archiviato allo schema? Stavo seguendo le linee guida da http://yonik.com/solr-nested-objects/, e prima di aggiungere un documento nidificato, ho dovuto aggiornare lo schema: $ 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

+0

Puoi fornire lo schema? Come hai dichiarato questo campo nello schema? –

risposta

3

È può provare BlockJoinQuery. Refer here

+1

Bello! Indizio molto utile!e lo trovo qui finalmente risolto il mio problema: http://heliosearch.org/solr-4-8-features/ –

+1

Il sito non è raggiungibile! Puoi aggiornare la tua risposta per favore? @HetfieldJoe –

+0

@TimLong link funziona bene per me. Provaci ancora. Puoi anche google per la query di blocco dei join. Un'altra risorsa è http://yonik.com/solr-nested-objects/ – sidgate

Problemi correlati