2012-01-26 32 views
5

में निर्दिष्ट क्षेत्रों मैं एक CouchDB नदी के माध्यम से सूचकांक करने के लिए डेटा प्राप्त एक ElasticSearch सेटअप है,। मैं समस्या यह है कि CouchDB दस्तावेजों में क्षेत्रों के सबसे वास्तव में खोज के लिए प्रासंगिक नहीं हैं: वे आंतरिक रूप से आवेदन (आईडी और इतने पर) द्वारा इस्तेमाल किया क्षेत्र हैं, और मैं क्योंकि इन क्षेत्रों में से झूठे सकारात्मक पाने के लिए नहीं करना चाहती। इसके अलावा, इंडेक्सिंग की आवश्यकता नहीं है डेटा मुझे संसाधनों का अपशिष्ट लगता है।ElasticSearch: अनुक्रमणिका केवल मानचित्रण

इस समस्या को हल करने के लिए, मैं एक मानचित्रण जहाँ मैं क्षेत्रों जो मैं अनुक्रमित करने के लिए निर्दिष्ट परिभाषित किया है। मैं ElasticSearch तक पहुंचने के लिए pyes का उपयोग कर रहा हूं। मैं जिस प्रक्रिया का पालन करता हूं वह है:

  1. एक इंडेक्स से जुड़े कोच डीबी नदी बनाएं। जाहिरा तौर पर यह भी सूचकांक बनाता है, और है कि सूचकांक जो, जहाँ तक मैं देख सकता हूँ, गतिशील रूप से आवंटित प्रकार के साथ सभी क्षेत्रों, शामिल हैं में एक "CouchDB" मानचित्रण बनाता है।
  2. एक मानचित्रण रखो, खेतों जो मैं वास्तव में सूचकांक करना चाहते हैं यह restring।

    curl -XGET http://localhost:9200/notes_index/_mapping?pretty=true 
    
    { 
        "notes_index" : { 
        "default_mapping" : { 
         "properties" : { 
         "note_text" : { 
          "type" : "string" 
         } 
         } 
        }, 
        "couchdb" : { 
         "properties" : { 
         "_rev" : { 
          "type" : "string" 
         }, 
         "created_at_date" : { 
          "format" : "dateOptionalTime", 
          "type" : "date" 
         }, 
         "note_text" : { 
          "type" : "string" 
         }, 
         "organization_id" : { 
          "type" : "long" 
         }, 
         "user_id" : { 
          "type" : "long" 
         }, 
         "created_at_time" : { 
          "type" : "long" 
         } 
         } 
        } 
        } 
    } 
    

    समस्या मेरे पास है manyfold है::

यह सूचकांक परिभाषा के रूप में द्वारा प्राप्त है

  • कि डिफ़ॉल्ट "CouchDB" मानचित्रण सभी क्षेत्रों को अनुक्रमित करता है। मुझे यह नहीं चाहिए। क्या मैपिंग के निर्माण से बचना संभव है? मैं उलझन में हूं, क्योंकि वह मैपिंग एक ऐसा लगता है जो किसी भी तरह से कोच डीबी नदी से "कनेक्ट" हो रहा है।
  • मानचित्रण कि मैं बनाने का कोई प्रभाव नहीं लगता है: कोई दस्तावेज है कि मानचित्रण

द्वारा अनुक्रमित आप इस पर कोई सलाह है देखते हैं?

संपादित

यह वही है मैं वास्तव में बिल्कुल के रूप में आपके द्वारा लिखा गया, कर रहा हूँ है:

server="localhost" 

# Create the index 
curl -XPUT "$server:9200/index1" 

# Create the mapping 
curl -XPUT "$server:9200/index1/mapping1/_mapping" -d ' 
{ 
    "type1" : { 
     "properties" : { 
      "note_text" : {"type" : "string", "store" : "no"} 
     } 
    } 
} 
' 

# Configure the river 
curl -XPUT "$server:9200/_river/river1/_meta" -d '{ 
    "type" : "couchdb", 
    "couchdb" : { 
     "host" : "localhost", 
     "port" : 5984, 
     "user" : "admin", 
     "password" : "admin", 
     "db" : "notes" 
    }, 
    "index" : { 
     "index" : "index1", 
     "type" : "type1" 
    } 
}' 

index1 में दस्तावेज अभी भी "note_text" के अलावा अन्य क्षेत्रों में होते हैं, जो केवल एक है कि मैं मैपिंग परिभाषा में विशेष रूप से उल्लेख किया है। ऐसा क्यों है?

उत्तर

0

कॉच डीबी नदी का डिफ़ॉल्ट व्यवहार एक 'गतिशील' मैपिंग का उपयोग करना है, यानी आने वाले कॉच डीबी दस्तावेजों में पाए गए सभी फ़ील्ड इंडेक्स। आप सही हैं कि यह सूचकांक के आकार को अनावश्यक रूप से बढ़ा सकता है (क्वेरी के साथ कुछ समस्याएं क्वेरी से कुछ फ़ील्ड को छोड़कर हल की जा सकती हैं)।

'गतिशील' एक के बजाय अपने खुद के मानचित्रण का उपयोग करने के लिए आपको मानचित्रण आपके द्वारा बनाया गया उपयोग करने के लिए नदी प्लगइन विन्यस्त करने की जरूरत (this article देखें):

curl -XPUT 'elasticsearch-host:9200/_river/notes_index/_meta' -d '{ 
    "type" : "couchdb", 

    ... your CouchDB connection configuration ... 

    "index" : { 
     "index" : "notes_index", 
     "type" : "mapping1" 
    } 
}' 

प्रकार का नाम है कि आप URL में निर्दिष्ट कर रहे हैं, जबकि मानचित्रण PUT कि आप परिभाषा को शामिल कर एक ओवरराइड करता है कर रही है, तो प्रकार है कि आप बना रहे हैं तथ्य यह है mapping1 में है। इस आदेश को क्रियान्वित करने के लिए अपने आप को देखने के लिए प्रयास करें:

> curl 'localhost:9200/index1/_mapping?pretty=true' 

{ 
    "index1" : { 
    "mapping1" : { 
     "properties" : { 
     "note_text" : { 
      "type" : "string" 
     } 
     } 
    } 
    } 
} 

मुझे लगता है कि यदि आप प्रकार के अधिकार के नाम मिल जाएगा, यह काम कर रहा ठीक शुरू कर देंगे।

+0

आपकी टिप्पणी के लिए धन्यवाद, लेकिन कुछ अस्पष्ट है। मैं उस पुट अनुरोध में अपने मैपिंग का उपयोग कहां कर सकता हूं (मैंने इसे 'default_mapping' कहा है)? – dangonfast

+0

आपके पास प्रति इंडेक्स एक मैपिंग है, लेकिन आपके पास प्रत्येक मैपिंग में कई प्रकार के 'घोषित' हो सकते हैं। मुझे यकीन नहीं था कि आप किस मैपिंग प्रकार का उपयोग करना चाहते हैं - आपको उनमें से दो मिल गए हैं: 'couchdb' और' default_mapping'। नदी विन्यास में बस 'टाइप' कुंजी के लिए मान बदलें। –

+0

मैंने मूल प्रश्न संपादित किया है, जो अब वास्तविक POST अनुरोध दिखा रहा है जो मैं ES को कॉन्फ़िगर करने के लिए कर रहा हूं। यह अभी भी काम नहीं कर रहा है: सभी फ़ील्ड अभी भी अनुक्रमित हैं। – dangonfast