2015-05-11 6 views
6

यह इस वेबसाइट पर मेरा पहला प्रश्न है, इसलिए मैं प्रश्न पूछने का प्रयास करूंगा।elasticsearch में एक geopoint के साथ एक अप्रत्याशित/गतिशील रूप से मैप किए गए दस्तावेज़ को अनुक्रमणित करना NEST क्लाइंट

लोचदार खोज घोंसला क्लाइंट के साथ काम करते समय मैं अपने डेटा को स्टोर करने के लिए थोक अनुक्रमण का उपयोग करता हूं। सभी डेटा को Dictionary<string, object> की सहायता से अनुक्रमित किया जा सकता है। कंपनी जो मैं काम करता हूं गतिशील मानचित्रण पर जोर देती है, जिसका अर्थ है कि मुझे नोड्स पर जाने वाले चर घोषित करने की अनुमति नहीं है।

Dictionary <string, object> document_value= new Dictionary<string, object>(); 
Bulkcontainer.Index<object>(i => i.Index(index_name).Type(_type).Id(_id).Document(document_value)); 

यह जीईओ अंक के उपयोग तक कोई समस्या नहीं थी। यदि इन्हें जियोपॉइंट्स के रूप में अनुक्रमित नहीं किया गया है तो वे खोज योग्य नहीं होंगे, जब तानाशाही में रखा जाता है तो वे स्ट्रिंग के लिए डिफ़ॉल्ट होंगे। मैं उन्हें ओवरराइड करने में सक्षम नहीं हूं। geopield के लिए डेटा geofields नामक एक और dictonary के रूप में कोड को दिया जाता है।

PointGeoShape coord = new PointGeoShape(); 
    Dictionary<string, PointGeoShape> geovalue = new Dictionary<string, PointGeoShape>(); 
    if (geofields!= null) 
    { 
     foreach (KeyValuePair<string, object> geo in geofields) 
     { 
      string veldnaam = geo.Key.ToUpper(); 
      string temp = geo.Value.ToString(); 
      if (temp != "") 
      { 
       string[] array = temp.Split(new char[] { ',' }, 2); 
       List<double> list = new List<double>(); 
       list.Add(double.Parse(array[0]));//lon 
       list.Add(double.Parse(array[1]));//lat 
       IEnumerable<double> latlon = list; 
       coord.Coordinates = latlon; 
       document_value.Add(veldnaam, coord); 
      } 
     } 
    } 

मेरी समस्या स्पष्ट करने के लिए किसी भी मदद


सराहना की होगी मैं भू रूप

public class ES_DATA_GEO 
{ 
public Dictionary<string, object> Data { get; set; } 
[ElasticProperty(Type = Nest.FieldType.GeoShape)] 
public GeoShape Locatiecoord { get; set; } 
} 

के सूचकांक प्रकार बदल दिया है, लेकिन अब जब मैं क्वेरी निष्पादित यह अभी भी रजिस्टर नहीं करता Locatiecoord फ़ील्ड

Failed to find geo_shape field [locatiecoord]]; 

फिर से किसी भी मदद की सराहना की जाती है

+0

हाय रॉय, मेरे पास एक समान है, अगर आपने इसे हल किया है, तो मुझे बताएं, मैंने अपना प्रश्न यहां रखा है। http://stackoverflow.com/questions/33579086/unable-to-insert-dynamic-object-to-elastic-search-using-nest – cmrhema

उत्तर

2

दस्तावेज़ों के अनुसार, भौगोलिक बिंदुओं के साथ भौगोलिक बिंदु स्वचालित रूप से नहीं पहचाने जा सकते हैं। Geo Points

0

देखें जो इस तरह अपने सूचकांक बनाते हैं:

var created = client.CreateIndex("MyIndexName", 
    c => c.AddMapping<dynamic>(m => m.Type("_default_"). 
    DynamicTemplates(t => t.Add(f => f.Name("shape_fields") 
    .Match("MyShapeFieldName").Mapping(ma => ma.GeoPoint(s => 
    s.IndexGeoHash().IndexLatLon())))) 

फिर शब्दकोश को सूचीबद्ध करने में अपने प्रारंभिक दृष्टिकोण सीधे मानते हुए कि आपके कुंजी "MyShapeFieldName" है जो के साथ अपने शब्दकोश में एक प्रविष्टि है काम करेंगे एक समन्वय मूल्य। आप संभवतः नाम ("MyShapeFieldName") के बजाय प्रकार (समन्वय) के आधार पर मिलान करने के लिए अपना नमूना बदल सकते हैं, लेकिन मैंने इसका परीक्षण नहीं किया है।

संबंधित मुद्दे