2012-11-30 58 views
6

私は弾力性が新しく、私の知識はelasticsearchサイトからのもので、私は助けが必要です。 私の仕事は、html形式の大きな行のデータを弾性検索にインデックスすることです。私はすでにデータをクロールし、それをディスク(200 000 htmlファイル)に保存しました。私の質問は、elasticsearchにすべてのHTMLファイルをインデックスする最も簡単な方法は何ですか?弾力性を要求するためには、各文書ごとに手動で行う必要がありますか?例:htmlファイルを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" 
}' 

2番目の質問は、JSONフィールド1のデータを取得するためにHTMLコードを解析する必要があるかどうかです。

最後にインデックスを作成した後、すべてのHTMLドキュメントを削除できますか?全てに感謝。

答えて

3

私はbulk apiを見ると、1回のリクエストで複数のドキュメントを送信できるため、インデックス作成の処理速度が向上します。どれくらいの大きさであるかに応じて、10個、20個またはそれ以上の文書のバッチを送ることができます。

インデックスする対象によっては、html全体を1つのフィールドとして索引付けする場合を除き、htmlを解析する必要があります(その場合はhtml strip char filterを使用して、インデックス付きテキスト)。

インデックスを作成した後、マッピングが正しいことを確認して、探しているものを見つけることをお勧めします。 _sourceという特殊フィールドを使っていつでも再インデックスすることができますが、あなたがすでにインデクサコードを書いている場合は、必要に応じて(同じhtmlドキュメントを使用して)再度索引付けすることができます。実際には、データは一度も索引付けされませんので、注意してください。たとえelasticsearchがいつでも_sourceフィールドを助けても)、既存の索引を照会して、すべての文書を別の索引に再索引するだけです。

0

@ javannさんのバルクAPIを見ると、間違いなく正しい方向に導かれます。 NESTを使用している場合は、すべてのオブジェクトをリストに格納してから、JSONオブジェクトをシリアル化してコンテンツの索引付けを行うことができます。

具体的には、インデックスを作成してコンテンツをそのまま保存する前にhtmlタグを取り除きたい場合は、マッピングを定義する際に、「html "

マッパーの添付は、特に複数のドキュメントタイプを扱う場合には便利ですが、特に、htmlタグを取り除く目的でこれを使用するだけで十分です(これはhtml_strip charフィルタ)。

ただし、予告なしに、htmlタグは保存されません。どういうわけかそれらのタグが必要な場合は、元のコンテンツを格納する別のフィールドを定義することをお勧めします。別の注意:マッパー添付ファイルのためにマルチファイルを指定することはできないので、マッパー添付ファイルの外にそれを保存する必要があります。下記の私の実例を見て​​ください。

あなたはこのマッピングをもたらすために必要があります:

{ 
    "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" : { } 
    } 
} 

NESTで、私のようなコンテンツ組み立てるようなもの:私はある意味でこれをテストしている

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); 

を - 結果は

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