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 *]
potresti, per favore, fornire schema.xml per questo caso particolare? – frankie
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
Puoi fornire lo schema? Come hai dichiarato questo campo nello schema? –