मैं रावेनडीबी के लिए नया हूं। मैं एक मल्टी मैप इंडेक्स सुविधा का उपयोग करने की कोशिश कर रहा हूं, हालांकि मुझे यकीन नहीं है कि यह मेरी समस्या का सबसे अच्छा तरीका है या नहीं। तो मेरे पास तीन दस्तावेज हैं: यूनिट, कार, लोग।रावेनडीबी मल्टीमैप इंडेक्स
कार दस्तावेज़ इस तरह दिखता है:
{
Id: "cars/123",
PersonId: "people/1235",
UnitId: "units/4321",
Make: "Toyota",
Model: "Prius"
}
लोग दस्तावेज़ इस तरह दिखता है:
{
Id: "people/1235",
FirstName: "test",
LastName: "test"
}
और इकाई डॉक:
{
Id: "units/4321",
Address: "blah blah"
}
यह एक संक्षिप्त उदाहरण के लिए, में मेरा असली है ऐप में और अधिक फ़ील्ड हैं, इसलिए डेटा डी-सामान्यीकरण मेरा आखिरी उपाय होगा।
मुझे बनाने और अनुक्रमण करने की आवश्यकता है कि इन तीनों दस्तावेज़ों में से एक दस्तावेज़ में शामिल हो जाएगा। कुछ इस तरह:
{
CarId: "cars/123",
PersonId: "people/1235",
UnitId: "units/4321",
Make: "Toyota",
Model: "Prius"
FirstName: "test",
LastName: "test"
Address: "blah blah"
}
// same unit different person owns a different car
{
CarId: "cars/122",
PersonId: "people/1236",
UnitId: "units/4321",
Make: "Toyota",
Model: "4runner"
FirstName: "test",
LastName: "test"
Address: "blah blah"
}
एक संबंधपरक डेटाबेस में मैं सिर्फ दो का प्रयोग करेंगे आईडी से लोग और यूनिट तालिकाओं के लिए जुड़ जाता है और अपनी कार की मेज एक समग्र इकाई होगी।
यहाँ सूचकांक परिभाषा है कि मैं है:
public class MyMultiIndex : AbstractMultiMapIndexCreationTask<JoinedDocument>
{
public MyMultiIndex()
{
// creating maps
AddMap<Car>(cars => cars.Select(e => new { e.CarId, e.Make, e.Model, PersonId = e.PersonId, UnitId = e.UnitId, FirstName = (null)string, LastName = (null)string, Address = (nul)string }));
AddMap<People>(people => people.Select(e => new { CarId = (string)null, Make = (string)null, Model = (string)null, PersonId = e.Id, UnitId = (null)string, FirstName = e.FirstName, LastName = e.LastName, Address = (nul)string }));
AddMap<Unit>(people => people.Select(e => new { CarId = (string)null, Make = (string)null, Model = (string)null, PersonId = (null)string, UnitId = e.null, FirstName = (nul)string , LastName = (nul)string , Address = e.Address }));
Reduce = results => from result in results
group result by result.CarId
into g
select new JoinedDocument
{
CarId = g.Key,
PersonId = g.First(e => e.CarId == g.Key).PersonId,
UnitId = g.First(e => e.CarId == g.Key).UnitId,
Model = g.First(e => e.CarId == g.Key).Model,
Make = g.First(e => e.CarId == g.Key).Make,
**// this never works. It is like result set does not contain anything with this personId. It looks like AddMap for people document did not work.**
FirstName = results.First(e => e.PersonId == g.First(ie => ie.CarId == g.Key).PersonId).FirstName,
**// this never works. It is like result set does not contain anything with this personId. It looks like AddMap for people document did not work.**
LastName = results.First(e => e.PersonId == g.First(ie => ie.CarId == g.Key).PersonId).LastName,
**// this never works. It is like result set does not contain anything with this personId. It looks like AddMap for unit document did not work.**
UnitAddress = results.First(e => e.UnitId == g.First(ie => ie.CarId == g.Key).UnitId).LastName,
};
Index(map => map.Model, FieldIndexing.Analyzed);
Index(map => map.Make, FieldIndexing.Analyzed);
Index(map => map.LastName, FieldIndexing.Analyzed);
Index(map => map.FirstName, FieldIndexing.Analyzed);
Index(map => map.Make, FieldIndexing.Analyzed);
Index(map => map.UnitAddress, FieldIndexing.Analyzed);
}
}
जब RavenDb इस सूचकांक मैं त्रुटियों को देखने जब यह मैं प्रदान की है कम समारोह को चलाने के लिए कोशिश कर रहा है चलाता है। यह त्रुटि तब फेंकता है जब मैं एक रिकॉर्ड से मिलान करने की कोशिश कर रहा हूं जहां व्यक्ति का पहला नाम और अंतिम नाम मौजूद है, वही इकाई के साथ होता है।
मेलिंग सूची के साथ क्रॉस पोस्ट: https://groups.google.com/forum/?fromgroups#!topic/ravendb/Uym2tkvMaH8 –
[यह पोस्ट] (http://ayende.com/blog/156225/relational -सार्चिंग-बेकार-डोनर्सक्वॉ-टी-ट्राई-टू-रीप्लिकेट-इट) इस सवाल को सीधे संबोधित करता है। –