2012-11-30 24 views
6

Tôi hoàn toàn mới trong đàn hồi nên kiến ​​thức của tôi chỉ từ trang web elasticsearch và tôi cần trợ giúp. Nhiệm vụ của tôi là lập chỉ mục dữ liệu hàng lớn ở định dạng html thành tìm kiếm đàn hồi. Tôi đã thu thập dữ liệu của mình và lưu trữ nó vào đĩa (200 000 tệp html). Câu hỏi của tôi là cách đơn giản nhất để lập chỉ mục tất cả các tệp html vào elasticsearch là gì? Tôi có nên làm điều đó bằng tay cho từng tài liệu để đặt yêu cầu đàn hồi không? Ví dụ như:Làm cách nào để lập chỉ mục kết xuất tệp html thành 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" 
}' 

Và câu hỏi thứ hai là nếu tôi phải phân tích cú pháp tài liệu HTML để truy xuất dữ liệu cho trường JSON 1 như trong mã ví dụ?

Và cuối cùng sau khi lập chỉ mục, tôi có thể xóa tất cả tài liệu HTML không? Cảm ơn vì tất cả.

Trả lời

3

Tôi muốn xem bulk api cho phép bạn gửi nhiều hơn tài liệu trong một yêu cầu, để tăng tốc quá trình lập chỉ mục của bạn. Bạn có thể gửi hàng loạt 10, 20 tài liệu trở lên, tùy thuộc vào mức độ lớn của chúng.

Tùy thuộc vào những gì bạn muốn lập chỉ mục, bạn có thể cần phải phân tích cú pháp html, trừ khi bạn muốn lập chỉ mục toàn bộ html dưới dạng một trường đơn lẻ (bạn có thể muốn sử dụng html strip char filter trong trường hợp đó để loại bỏ các thẻ html khỏi văn bản được lập chỉ mục).

Sau khi lập chỉ mục, tôi khuyên bạn nên đảm bảo ánh xạ là chính xác và bạn có thể tìm thấy những gì bạn đang tìm kiếm. Bạn luôn có thể sử dụng lại trường đặc biệt _source mà cửa hàng elasticsearch nằm dưới mui xe, nhưng nếu bạn đã viết mã chỉ mục của mình, bạn có thể muốn sử dụng lại mã này để reindex khi cần (tất nhiên có cùng tài liệu html). Trong thực tế, bạn không bao giờ lập chỉ mục dữ liệu của bạn một lần ... vì vậy hãy cẩn thận :) mặc dù elasticsearch luôn giúp bạn với trường _source), nó chỉ là vấn đề truy vấn chỉ mục hiện có và reindex tất cả các tài liệu của nó trên một chỉ mục khác.

0

Đề xuất của @ javanna để xem API hàng loạt chắc chắn sẽ dẫn bạn đi đúng hướng. Nếu bạn đang sử dụng NEST, bạn có thể lưu trữ tất cả các đối tượng của bạn trong một danh sách mà sau đó bạn có thể tuần tự hóa các đối tượng JSON để lập chỉ mục nội dung.

Cụ thể, nếu bạn muốn tách thẻ html ra trước khi lập chỉ mục và lưu trữ nội dung, bạn có thể sử dụng plugin đính kèm bản đồ - trong đó khi bạn xác định ánh xạ, bạn có thể phân loại content_type thành "html . "

Tệp đính kèm bản đồ rất hữu ích cho nhiều thứ, đặc biệt nếu bạn đang xử lý nhiều loại tài liệu, nhưng đáng chú ý nhất - tôi tin rằng chỉ sử dụng mục đích tước thẻ html là đủ đủ (bạn không thể làm gì với html_strip bộ lọc char).

Chỉ cần báo trước - Không có thẻ html nào được lưu trữ. Vì vậy, nếu bạn cần các thẻ này bằng cách nào đó, tôi sẽ đề xuất xác định một trường khác để lưu trữ nội dung gốc. Một lưu ý khác: Bạn không thể chỉ định multifields cho tài liệu đính kèm bản đồ, vì vậy bạn sẽ cần phải lưu trữ nó bên ngoài tài liệu đính kèm bản đồ. Xem ví dụ làm việc của tôi dưới đây.

Bạn sẽ cần phải dẫn đến bản đồ này:

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

như vậy mà trong NEST, tôi sẽ lắp ráp các nội dung như vậy:

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

Tôi đã thử nghiệm này trong Sense - kết quả là như sau:

"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 " 
    ] 
} 
Các vấn đề liên quan