2012-11-30 3 views
6

Ich bin total neu in elastischen so mein Wissen ist nur von elasticsearch Website und ich muss helfen. Meine Aufgabe ist es, große Zeilendaten im HTML-Format in die elastische Suche zu indizieren. Ich habe meine Daten bereits gecrawlt und auf Festplatte gespeichert (200 000 HTML-Dateien). Meine Frage ist, was ist der einfachste Weg, alle HTML-Dateien in elasticsearch zu indizieren? Sollte ich es manuell für jedes Dokument machen, um eine Anfrage an Elastic zu stellen? Zum Beispiel wie:Wie indizieren Dump von HTML-Dateien zu elasticsearch?

curl -XPUT 'http://localhost:9200/registers/tomas/1' -d '{ 
    "user" : "tomasko", 
    "post_date" : "2009-11-15T14:12:12", 
    "field 1" : "field data" 
    "field 2" : "field 2 data" 
}' 

Und zweite Frage ist, ob ich HTML-Dokument zum Abrufen von Daten für JSON Feld 1 wie über in Beispiel-Code zu analysieren habe?

Und endlich nach der Indizierung kann ich alle HTML-Dokumente löschen? Danke für alles.

Antwort

3

Ich würde die bulk api betrachten, die es Ihnen ermöglicht, mehr als Dokumente in einer einzigen Anfrage zu senden, um Ihre Indexierung zu beschleunigen. Sie können Stapel von 10, 20 oder mehr Dokumenten senden, je nachdem, wie groß sie sind.

Je nachdem, was Sie indexieren möchten, müssen Sie möglicherweise das HTML analysieren, es sei denn, Sie möchten den gesamten HTML-Code als einzelnes Feld indizieren (Sie könnten in diesem Fall die HTML-Tags aus dem indizierter Text).

Nach der Indexierung würde ich vorschlagen, um sicherzustellen, dass die Zuordnung korrekt ist und Sie finden können, was Sie suchen. Sie können das Spezialfeld _source immer neu indizieren, das elasticsearch unter der Haube speichert, aber wenn Sie Ihren Indexer-Code bereits geschrieben haben, können Sie ihn bei Bedarf erneut indizieren (natürlich mit denselben html-Dokumenten). In der Praxis indexieren Sie Ihre Daten nie ... also seien Sie vorsichtig :) obwohl elasticsearch Ihnen immer mit dem _source-Feld hilft, ist es nur eine Frage des bestehenden Indexes und der Indizierung aller Dokumente in einem anderen Index.

0

@ javannas Vorschlag, die Bulk-API zu betrachten, wird Sie definitiv in die richtige Richtung führen. Wenn Sie NEST verwenden, können Sie alle Ihre Objekte in einer Liste speichern, in der Sie dann JSON-Objekte für die Indexierung des Inhalts serialisieren können.

Wenn Sie die HTML-Tags vor dem Indexieren und Speichern des Inhalts strippen möchten, können Sie das Mapper-Anhang-Plug-in verwenden, in dem Sie den content_type als "html" kategorisieren können . " Der Mapper-Anhang ist nützlich für viele Dinge, besonders wenn Sie mehrere Dokumententypen bearbeiten, aber vor allem - ich glaube, dass es einfach ausreicht, die HTML-Tags zu entfernen (das ist mit html_strip nicht möglich) Kohlefilter).

Nur eine Vorwarnung obwohl - KEINE der HTML-Tags gespeichert werden. Also, wenn Sie diese Tags irgendwie brauchen, würde ich vorschlagen, ein anderes Feld zu definieren, um den ursprünglichen Inhalt zu speichern. Noch ein Hinweis: Sie können keine Mehrfachfelder für Mapper-Attachment-Dokumente angeben, daher müssen Sie diese außerhalb des Mapper-Anhangdokuments speichern. Siehe mein Arbeitsbeispiel unten.

Sie werden in dieser Abbildung führen müssen:

{ 
    "html5-es" : { 
    "aliases" : { }, 
    "mappings" : { 
     "document" : { 
     "properties" : { 
      "delete" : { 
      "type" : "boolean" 
      }, 
      "file" : { 
      "type" : "attachment", 
      "fields" : { 
       "content" : { 
       "type" : "string", 
       "store" : true, 
       "term_vector" : "with_positions_offsets", 
       "analyzer" : "autocomplete" 
       }, 
       "author" : { 
       "type" : "string", 
       "store" : true, 
       "term_vector" : "with_positions_offsets" 
       }, 
       "title" : { 
       "type" : "string", 
       "store" : true, 
       "term_vector" : "with_positions_offsets", 
       "analyzer" : "autocomplete" 
       }, 
       "name" : { 
       "type" : "string" 
       }, 
       "date" : { 
       "type" : "date", 
       "format" : "strict_date_optional_time||epoch_millis" 
       }, 
       "keywords" : { 
       "type" : "string" 
       }, 
       "content_type" : { 
       "type" : "string" 
       }, 
      "content_length" : { 
       "type" : "integer" 
       }, 
       "language" : { 
       "type" : "string" 
       } 
      } 
      }, 
      "hash_id" : { 
      "type" : "string" 
      }, 
      "path" : { 
      "type" : "string" 
      }, 
      "raw_content" : { 
      "type" : "string", 
      "store" : true, 
      "term_vector" : "with_positions_offsets", 
      "analyzer" : "raw" 
      }, 
      "title" : { 
      "type" : "string" 
      } 
     } 
     } 
    }, 
    "settings" : { //insert your own settings here }, 
    "warmers" : { } 
    } 
} 

Derart, dass in NEST, werde ich den Inhalt als solche zusammenbauen:

Attachment attachment = new Attachment(); 
attachment.Content = Convert.ToBase64String(File.ReadAllBytes("path/to/document")); 
attachment.ContentType = "html"; 

Document document = new Document(); 
document.File = attachment; 
document.RawContent = InsertRawContentFromString(originalText); 

ich dies in Sense getestet haben - Ergebnisse wie folgt:

"file": { 
    "_content": "PGh0bWwgeG1sbnM6TWFkQ2FwPSJodHRwOi8vd3d3Lm1hZGNhcHNvZnR3YXJlLmNvbS9TY2hlbWFzL01hZENhcC54c2QiPg0KICA8aGVhZCAvPg0KICA8Ym9keT4NCiAgICA8aDE+VG9waWMxMDwvaDE+DQogICAgPHA+RGVsZXRlIHRoaXMgdGV4dCBhbmQgcmVwbGFjZSBpdCB3aXRoIHlvdXIgb3duIGNvbnRlbnQuIENoZWNrIHlvdXIgbWFpbGJveC48L3A+DQogICAgPHA+wqA8L3A+DQogICAgPHA+YXNkZjwvcD4NCiAgICA8cD7CoDwvcD4NCiAgICA8cD4xMDwvcD4NCiAgICA8cD7CoDwvcD4NCiAgICA8cD5MYXZlbmRlci48L3A+DQogICAgPHA+wqA8L3A+DQogICAgPHA+MTAvNiAxMjowMzwvcD4NCiAgICA8cD7CoDwvcD4NCiAgICA8cD41IDA5PC9wPg0KICAgIDxwPsKgPC9wPg0KICAgIDxwPjExIDQ3PC9wPg0KICAgIDxwPsKgPC9wPg0KICAgIDxwPkhhbGxvd2VlbiBpcyBpbiBPY3RvYmVyLjwvcD4NCiAgICA8cD7CoDwvcD4NCiAgICA8cD5qb2c8L3A+DQogIDwvYm9keT4NCjwvaHRtbD4=", 
    "_content_length": 0, 
    "_content_type": "html", 
    "_date": "0001-01-01T00:00:00", 
    "_title": "Topic10" 
}, 
"delete": false, 
"raw_content": "<h1>Topic10</h1><p>Delete this text and replace it with your own content. Check your mailbox.</p><p> </p><p>asdf</p><p> </p><p>10</p><p> </p><p>Lavender.</p><p> </p><p>10/6 12:03</p><p> </p><p>5 09</p><p> </p><p>11 47</p><p> </p><p>Halloween is in October.</p><p> </p><p>jog</p>" 
}, 
"highlight": { 
"file.content": [ 
    "\n <em>Topic10</em>\n\n Delete this text and replace it with your own content. Check your mailbox.\n\n  \n\n asdf\n\n  \n\n 10\n\n  \n\n Lavender.\n\n  \n\n 10/6 12:03\n\n  \n\n 5 09\n\n  \n\n 11 47\n\n  \n\n Halloween is in October.\n\n  \n\n jog\n\n " 
    ] 
} 
Verwandte Themen