مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

تاپیک مورد نظر بسته شده است

کاربر سایت

aminsoraya

عضویت از 1393/10/17

مشکل با fulltext-search در سمت اپلیکیشن

  • سه شنبه 20 شهریور 1397
  • 18:47
تشکر میکنم

سلام خدمت دوستان برنامه نویسم

امروز متوجه یه مشکل اساسی تو برنامم شدم که با بررسی SP سمت دیتابیس متوجه عدم صحت عملکرد تنها در سمت برنامه شدم اونم اینه که من از ماژول fulltext search , دستور contains تو stored procedure  استفاده کردم(به جهت پرفورمنس و io کمتر)

وقتی میخوام یه عبارت رو سرچ کنم برای مثال وب مانی باید به این صورت به اس پی پاسش بدم: وب NEAR مانی

اما این تو سمت برنامه اصلا جوابگو نیس ، علارغم اینکه من BREAK POINT میزنم و پارامتر رو چک میکنم میبینم که همینه اما جوابی نمیگیریم اما اگه همینو مستقیم تو محیط کوئری امتحان کنم جواب میده.

من برای ارتباط با دیتابیس فیلد هام رو به صورت SQLParameter در آوردم و پارامترها رو به اس پی پاس میدم

ممنون از اینکه منو راهنمایی میکنید

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

aminsoraya

عضویت از 1393/10/17

  • چهارشنبه 21 شهریور 1397
  • 22:40

علارغم اینکه علت اجرای موفقیت آمیز دستور رو تنها در سمت sql رو متوجه نشدم اما مشکل رو با تحقیق و شکست و خطای بسیار زیاد تونستم حل کنم و برا دوستانی که خواهان دانش هستن به اشتراک میزارم!

دوستان باید به چند تا نکته توجه کنن که در ابتدا چنانچه خواهان استفاده از full-text index باشن در همون ابتدای کار قابلیت رو راه اندازی کنن و قبل از ورود هر چیزی زیر ساخت رو پیاده کنن. همچنین باید مد نظر داشته باشید که با rebuild کردن full text catalogue (که در واقع نقش یه container و ظرف برای ایندکسها هست) اتفاق خاصی نمی افته و همون نتایج قبلی رو بر میگردونه . لازمه بدونید من حدود 20 رکورد تستی داشتم که حتی پس از rebuild کردن هیچ اتفاقی نیفتاد و این تکنولوژی تنها رکوردهایی رو میشناخت که پس از ایجاد و فعال کردن قابلیت درج کرده بودم.(نفهمیدم چرا) پس با بازنویسی رکوردهام (تو محیط design یا گرافیکی به صورت دستی) نتیجه مورد نظرم رو گرفتم.

نکته بعدی از جمله نکاتی هست که باید هنگام درج دیتا تو جدول رعایت کنید:
برای مثال مسترکارت با مستر کارت متفاوته پس اگه مسترکارت سیو شده باشه و انتظار واکشی مستر کارت رو داشته باشین با خطا مواجه میشید چون دوعبارت جدا از هم هستن و مسترکارت به تنهایی یه عبارته و مستر یه عبارت و کارت یه عبارت دیگه هست پس نیاز به جدا سازی با NEAR یا AND رو داره (مستر NEAR کارت) و اگه مستر کارت رو تنها جستجو کنید با خطا مواجه میشید.
به عبارتی مسترکارت باید فقط 8 طول داشته باشه .
عباراتی که پس از حروف ر،و،ا،ز،د،ذ نوشته میشن باید بدون فاصله در کنار هم قرار بگیرن مثل مسترکارت
اما عباراتی که غیر از کلمات فوق باشن باید با یک فاصله (space) در کنار هم قرار بگیرن مانند وب مانی
این نکات باید در هنگام درج عبارت تو جدول مد نظر قرار بگیره
شاید بپرسید که چطور میشه کاربر رو مطلع کرد ؟ در پاسخ باید بگم تا حد بسیار زیادی رو میشه با کد کنترل کرد من دستورات لازم رو نوشتم و بارها مورد آزمون و خطا قرارش دادم (در صورت رعایت این نکته تا حد چشم گیری خطا کاهش پیدا میکنه)!
با فرض اینکه متد قراره یه لیست نام رو بر حسب جستجو از جدولی واکشی کنه:

public static IEnumerable<string> get(string name)
        {
            RegexOptions options = RegexOptions.None;
            Regex regex = new Regex("[ ]{2,}", options);
            name = regex.Replace(name.Trim(), " ");
 
            char[] ch = new char[] { 'ا', 'و', 'د', 'ر', 'ز' };
 
            for (int j = 0; j < name.Length; j++)
            {
                for (int i = 0; i < ch.Length; i++)
                {
                    try
                    {
                        char c = Char.Parse(name.Substring(name.IndexOf(" ") - 1, 1));
                        if (c.Equals(ch[i]))
                        {
                            name = name.Replace(" ", "");
                        }
                    }
                    catch { }
                }
            }
                name = name.Replace(" ", " NEAR ");
            SqlParameter sq = new SqlParameter()
            {
                SqlDbType = System.Data.SqlDbType.NVarChar,
                SqlValue = name,
                ParameterName = "N"
            };
            return
                model.Database.SqlQuery<string>
                ("select Name from tbExpressions where CONTAINS(Name,@N)",sq).ToList();
 
        }

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 22 شهریور 1397
  • 08:47

ممنون بابت اشتراک گذاری ، برای من خیلی جالب بود 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

تاپیک مورد نظر بسته شده و امکان درج پاسخ وجود ندارد

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)