PDA

View Full Version : ذخیره متن کناب



seyedmajid
جمعه 15 شهریور 1392, 18:08 عصر
سلام دوستان
من میخام پروژه ای بنویسم که در آن باید متن کتاب و یکسری مستندات دیگر را توش نگه داری کنم و بتونم داخل متن اونها جست و جو کنم
این مستندات و کتاب ها هم تعداد زیادی دارند و هم خودشان متن های حجیمی دارند
علاوه بر مطالب بالا میخام روی هر تکه از متن هر کتاب یا سندی بتونم برچسب بزنم ( برچسب در حقیقت تنظیم کردن یک ویژگی برای آن تکه متن است)
شما مرا راهنمایی کنید چطور این اطلاعات را باید نگه داری و مدیریت کنم
این پروژه را میخام با سی شارپ بنویسم ولی نمیدونم چطور باید داده ها را که همون کتاب ها هستند نگهداری کنم

ali_autumnal
شنبه 16 شهریور 1392, 09:45 صبح
یه مدلی ایجاد کنید با نام book که جزئیات کتاب رو بتونید توسط اون ذخیره کنید.
مثلا:
نام نویسنده، عنوان کتاب، لیست تگ ها و...

یه مدل دیگه ای ایجاد کنید جهت ذخیره محتوای کتاب
مثلا:
کد محتوای
کد کتاب
محتوای

توضیح:
چرا به این فرم انجام بدهیم؟

در دیتابیس شما string ها رو با nvarchar ذخیره می کنید و نهایتا می تونید 4000 کاراکتر رو ذخیره کنید. از طرفی محتوای کتاب ها بیشتر از 4000 کاراکتر هست و نمیشه در یک رکورد ذخیره کرد. برای همین من محتوای کتاب رو جدا گانه در رکورد هایی با طول 4000 کاراکتر ذخیره می کنم. که این هم نیاز داره محتوای کتاب از قبل به رکورد های 4000 تایی تقسیم کنید.


مدل فرضی یک کتاب:



public class Book
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
public long BookId { set; get; }


[Required]
[MaxLength(512)]
public string BookAbstract { set; get; }

[Required]
[MaxLength(64)]
public string Title { set; get; }

[Required]
public DateTime CreateDate { set; get; }

[Required]
public DateTime UpdateDate { set; get; }

//لیست تگ های کتاب که با یک جداکننده ذخیره می شود
[Required]
public string Tags { set; get; }

[Required]
public bool IsActive { set; get; }

[Required]
public int SortId { set; get; }

[Required]
public int BookGroupId { set; get; }
public virtual BookGroup BookGroup { get; set; }

public virtual IList<BookContent> BookContent { set; get; }

[Required]
public int AuthorId { set; get; }
public virtual Author Author { get; set; }
}


مدل فرضی محتوای کتاب:


public class BookContent
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
public Int64 BookContentId { set; get; }

[Required]
public long BookId { set; get; }
public virtual Book Book { get; set; }

[Required]
public string Content { set; get; }
}

seyedmajid
دوشنبه 18 شهریور 1392, 07:16 صبح
خوب اینکه کد سی شارپ هست
بخش دیتابیسش چه جور میشه
من میخام سرعت دسترسی به متن بالا باشه
شما با تکنولوژی lucene آشنایی دارید؟ نظرتون چیه ازش استفاده کنم؟ اگر نه چیز مشابهی برای کار دارید؟

ali_autumnal
دوشنبه 18 شهریور 1392, 13:09 عصر
خوب اینکه کد سی شارپ هست

خوب خودتون هم نوشتید کد #C می خواهید!!!!


بخش دیتابیسش چه جور میشه

خوب این هم مدل دیتابیس هست. من با استفاده از Ef Code First واستون نوشتم
کافیه همین فیلد ها رو در دیتابیس با همین نام ها ایجاد کنید


من میخام سرعت دسترسی به متن بالا باشه
در این روش سرعت دسترسی در صورتی که از Join استفاده نکنید بمراتب خیلی بالاست.


شما با تکنولوژی lucene آشنایی دارید؟ نظرتون چیه ازش استفاده کنم؟ اگر نه چیز مشابهی برای کار دارید؟

خیر من آشناییی ندارم. چیز مشابه رو هم ارائه کردم.