2013-03-05 12 views
7

Ich habe eine Frage zum Markieren verschachtelter Objektfelder.Elasticsearch highlight mit verschachtelten Objekten

Betrachten Datensatz wie folgt aus:

_source: { 

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

} 

Wenn der translations.value Ngram Filter hat, ist es möglich, Spiele in verschachteltes Objekt wie dieses zu markieren? Und wie würde die Highlight-Abfrage aussehen.

Vielen Dank für die Antwort.

+0

Hit das gleiche Problem heute - es sagt mir, ich habe ein Highlight (zB Wert: foo2 bar2 wenn ich nach foo2 suche), aber keine einfache Möglichkeit, das zurück zum Quelldokument zu binden – Phantomwhale

Antwort

3

Gleiches Problem hier. Es scheint, dass es jetzt einen Weg gibt, es in der elastischen Suche zu tun und nicht in naher Zukunft.

Developer Shay Banon wrote:

Um auf der Grundlage der verschachtelten Abfrage Hervorhebung zu tun, muss die verschachtelten Dokumente, um auch extrahiert werden, um es zu markieren, die problematischen (und weniger performant) ist.

Also:

war seine Erklärung, dass dies als eine gute Menge an Speicherplatz verbrauchen würde es eine große Anzahl von Kindern sein kann. Und es sieht echt zu mir als Hinzufügen dieser Funktion wird das Grundkonzept der Verarbeitung nur N Anzahl der Feeds zu einer Zeit verletzen.

So ist die einzige Möglichkeit, das Ergebnis einer Abfrage manuell in Ihrem eigenen Programm zu bearbeiten, um die Highlights hinzuzufügen.

aktualisieren

Ich weiß nicht, über Reifen oder ngram Filter, aber ich fand einen Weg, um alle Filter entsprechen verschachtelte Dokumente abzurufen durch verschachtelte Facetten und Facetten Filtern. Sie benötigen eine separate Abfrage zum Markieren, aber es ist viel schneller als das Durchsuchen von _source, in meinem Fall zumindest.

Sie können die resultierenden Facettenbegriffe zur Hervorhebung in Ihrem Programm verwenden.

Zum Beispiel: Ich möchte Links zu verschachtelte Dokumente markieren (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'); 
      } 
     }); 

Ich hoffe, dass hilft ein wenig. .

-1

können Sie verwenden force_source“: true in den Feldern das Dokument zu verursachen, wenn verschachtelte Felder verbunden sind, hervorgehoben werden

Verwandte Themen