2013-03-05 22 views
7

Ho una domanda sull'evidenziazione dei campi di oggetti nidificati.Evidenziazione Elasticsearch con oggetti nidificati

Considerate disco come questo:

_source: { 

    id: 286 
    translations: [ 
     { 
      id: 568 
      language: lang1 
      value: foo1 bar1 
     } 
     { 
      id: 569 
      language: lang2 
      value: foo2 bar2 
     } 
    ] 

} 

Se il translations.value ha Ngram filtro, è possibile evidenziare le partite in oggetto nidificato come questo? E come apparirebbe la query di evidenziazione.

Grazie mille per la risposta.

+0

Hit lo stesso problema di oggi - mi dice che ho un punto culminante (ad esempio il valore: foo2 bar2 quando cerco foo2) ma non è un modo semplice per legarlo al documento sorgente – Phantomwhale

risposta

3

Lo stesso problema qui. Sembra che ora ci sia modo di farlo nella ricerca elastica e non sarà nel prossimo futuro.

Developer Shay Banon wrote:

Per fare evidenziando basato sulla query nidificata, i nidificati documenti devono essere estratte pure per evidenziarlo, che è più problematico (e meno efficiente).

Also:

La sua spiegazione era che questo sarebbe prendere una buona quantità di memoria come ci può essere un gran numero di bambini. E mi sembra genuino come l'aggiunta di questa funzione violerà il concetto di base dell'elaborazione solo del numero di feed N alla volta.

Quindi, l'unico modo è di elaborare manualmente il risultato di una query nel proprio programma per aggiungere i punti salienti.

Aggiornamento

Non so sui filtri di pneumatici o Ngram ma ho trovato un modo per recuperare tutti i filtri corrispondenti documenti nidificati utilizzando sfaccettature nidificati e filtri sfaccettatura. Hai bisogno di una query separata per evidenziare, ma è molto più veloce di navigare attraverso _source, almeno nel mio caso.

{"query": 
    {"match_all":{}}, 
    "facets":{ 
     "matching_translations":{ 
      "nested":"translations", 
      "terms":{"field":"translations.value"}, 
      "facet_filter":{ 
       "bool":{"must":[{"terms":{"translations.value":["foo1"]}}]} 
      } 
     } 
    } 
} 

È possibile utilizzare i termini di sfaccettatura risultanti per l'evidenziazione nel programma.

Per esempio: voglio evidenziare collegamenti a documenti nidificati (in jQuery):

setHighlights = function(sdata){ 
     var highlightDocs = []; 
     if(sdata['facets'] && sdata['facets']['docIDs'] && sdata['facets']['doctIDs']['terms'] && sdata['facets']['docIDs']['terms'].length >0){ 
      for(var i in sdata['facets']['docIDs']['terms']){ 
       highlightDocs.push(sdata['facets']['docIDs']['terms'][i]['term']) 
      } 
     } 
     $('li.document_link').each(function(){ 
      if($.inArray($(this).attr('id'),highlightDocs) != -1) { 
       $(this).addClass('document_selected'); 
      } 
     }); 

Mi auguro che aiuta un po '. .

-1

È possibile utilizzare force_source": true nei campi per causare il documento evidenziato i campi una volta annidati sono uniti

Problemi correlati