2012-11-30 9 views
6

मैं लोचदार में पूरी तरह से नया हूं इसलिए मेरा ज्ञान केवल elasticsearch साइट से है और मुझे सहायता करने की आवश्यकता है। मेरा काम एचटीएमएल प्रारूप में लोचदार खोज में बड़े पंक्ति डेटा को इंडेक्स करना है। मैंने पहले ही अपना डेटा क्रॉल कर लिया है और इसे डिस्क पर संग्रहीत किया है (200 000 एचटीएमएल फाइलें)। मेरा सवाल यह है कि सभी एचटीएमएल फाइलों को elasticsearch में अनुक्रमणित करने का सबसे आसान तरीका क्या है? क्या मुझे प्रत्येक दस्तावेज़ के लिए लोचदार अनुरोध करने के लिए मैन्युअल रूप से ऐसा करना चाहिए? जैसे उदाहरण के लिए: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" 
}' 

और दूसरा सवाल है कि अगर मैं HTML दस्तावेज़ से अधिक उदाहरण कोड में की तरह JSON क्षेत्र 1 के लिए डेटा पुनः प्राप्त करने पार्स करने के लिए है?

और इंडेक्सिंग के बाद फाइनल मैं सभी HTML दस्तावेज़ों को हटा सकता हूं? सबको धन्यवाद।

उत्तर

3

मैं bulk api पर आपको देखता हूं जो आपको एक ही अनुरोध में दस्तावेज़ से अधिक भेजने की अनुमति देता है, ताकि आपकी अनुक्रमणिका प्रक्रिया तेज हो सके। आप 10, 20 या अधिक दस्तावेजों के बैच भेज सकते हैं, इस पर निर्भर करते हुए कि वे कितने बड़े हैं।

आप जो इंडेक्स करना चाहते हैं उसके आधार पर आपको एचटीएमएल को पार्स करने की आवश्यकता हो सकती है, जब तक कि आप एक ही फ़ील्ड के रूप में पूरे एचटीएमएल को इंडेक्स नहीं करना चाहते हैं (आप html strip char filter का उपयोग उस मामले में एचटीएमएल टैग को बाहर करने के लिए करना चाहते हैं अनुक्रमित पाठ)।

अनुक्रमण के बाद मैं यह सुनिश्चित करने का सुझाव दूंगा कि मानचित्रण सही है और आप जो खोज रहे हैं उसे ढूंढ सकते हैं। आप हमेशा _source विशेष फ़ील्ड का उपयोग करके रीइंडेक्स कर सकते हैं जो हूड के तहत लोचदार दुकानों को स्टोर करता है, लेकिन यदि आपने पहले से ही अपना इंडेक्सर कोड लिखा है तो आप इसे आवश्यकतानुसार फिर से उपयोग कर सकते हैं (निश्चित रूप से उसी HTML दस्तावेज़ों के साथ)। प्रैक्टिस में, आप कभी भी अपने डेटा को कभी भी इंडेक्स नहीं करते ... इसलिए सावधान रहें :) भले ही लोचदार खोज हमेशा आपको _source फ़ील्ड से बाहर करने में मदद करता है), यह मौजूदा इंडेक्स से पूछताछ करने और किसी अन्य इंडेक्स पर अपने सभी दस्तावेज़ों को रीइंडेक्स करने का मामला है।

0

@ थोक एपीआई को देखने के लिए जावन्ना के सुझाव से आपको निश्चित दिशा में निश्चित रूप से नेतृत्व किया जाएगा। यदि आप एनईईटी का उपयोग कर रहे हैं, तो आप अपनी सभी ऑब्जेक्ट्स को उस सूची में स्टोर कर सकते हैं, जिसे आप सामग्री को अनुक्रमणित करने के लिए JSON ऑब्जेक्ट्स को क्रमबद्ध कर सकते हैं।

विशेष रूप से, यदि आप इंडेक्सिंग और सामग्री को संग्रहीत करने से पहले एचटीएमएल टैग को पट्टी करना चाहते हैं, तो आप मैपर अटैचमेंट प्लगइन का उपयोग कर सकते हैं - जिसमें मैपिंग को परिभाषित करते समय, आप content_type को "html" के रूप में वर्गीकृत कर सकते हैं । "

मैपर अटैचमेंट कई चीजों के लिए उपयोगी है, खासकर यदि आप कई दस्तावेज़ प्रकारों को संभालने में कामयाब रहे हैं, लेकिन सबसे विशेष रूप से - मुझे विश्वास है कि एचटीएमएल टैग को अलग करने के उद्देश्य से इसका उपयोग पर्याप्त है (जो आप html_strip के साथ नहीं कर सकते चार फिल्टर)।

हालांकि एक चेतावनी हालांकि - 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" : { } 
    } 
} 

इस तरह की है कि घोंसला में, मैं इस तरह के रूप में सामग्री इकट्ठा होगा:

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 " 
    ] 
} 
संबंधित मुद्दे