• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

مشکل در سیستم جستجو

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
سلام به همه:D :D :D :D :D :D :D :D :D


من تو یه کار تمرینی که با دات نت انجام می دادم قصد داشتم برای اون،یک سیستم جستجو بسازم اما چون مطالب


سایتو تو با یک cms می نوشتم در نتیجه مطالب همراه با کدهای Html (که به ویسله cms تولید شده) در پایگاه داده


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


بخورد:( :( :( :( :( :( :( :(




حالا می خوام بدونم راهی وجود نداره که این کدها جستجو نشوند؟:D :D :D :D :D :D :D :D :D :D
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
باید متن رو از کد اچ تی ام ال استخراج کنی.توی ای اس پی من با استفاده از CreateObject این کار رو میکنم که توی دات نت هم میتونی از این روش استفاده کنی اما احتمالا خود دات نت امکان انجام همچین کاری رو داره.
کد:
<%
function get_text_from_html_code(html_code)
{				
	if (html_code.length ==0){return}
	doc = Server.CreateObject('htmlfile');
	doc.open();
	doc.write(html_code);	
	mdoc = doc.documentElement;	
	html_code = mdoc.innerText;	
	delete mdoc;delete doc; return html_code;	
}
Response.Write(get_text_from_html_code("<html><head></head><body><a href=abcd>mehrzad</a></body></html>"));
%>
 

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
مرسی plus جان:D :D :D :D :D


حالا کسی نمی دونه تو دات نت ترجیحا با سی شارپ چه جوری می شه این کارو کرد؟:D :D :D :D :D :D :D
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
با استفاده از همین روش یا با امکانات دات نت ؟
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
به نقل از plus :
باید متن رو از کد اچ تی ام ال استخراج کنی.توی ای اس پی من با استفاده از CreateObject این کار رو میکنم که توی دات نت هم میتونی از این روش استفاده کنی اما احتمالا خود دات نت امکان انجام همچین کاری رو داره.
کد:
<%
function get_text_from_html_code(html_code)
{				
	if (html_code.length ==0){return}
	doc = Server.CreateObject('htmlfile');
	doc.open();
	doc.write(html_code);	
	mdoc = doc.documentElement;	
	html_code = mdoc.innerText;	
	delete mdoc;delete doc; return html_code;	
}
Response.Write(get_text_from_html_code("<html><head></head><body><a href=abcd>mehrzad</a></body></html>"));
%>


plus جاین اینجوری باید تمام فیلد ها رو که میخوای بگردی یه دفه بیاری روی سرور درسته ؟
اگه اینجوری باشه خیلی منابع زیادی رو از سرور مصرف میکنه فکر کن 250000 رکورد رو میخوای سرچ کنی ! اصلا دلم نمیخواد فکرش رو بکنم :happy:
#C هم اگه بخوایم این کار رو بکنیم همین آشه و همین کاسه تنها راه اینه که برین سراغ استورد پروسیجر !
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
41
محل سکونت
نصف جهان
البته بنده بعید میدونم که کاربری مثلا بخواهد عبارتی مثلی HTML یا span یا .. را در سایت شما جستجو کند !!!

در دات نت این کار به سادگی قابل انجام است که اگر کمی صبر کنید بنده کد آن را برایتان خواهم گذاشت !!! چون خودم مدتها پیش به این مشکل برخورده بودم و باید کد مربوطه را پیدا کنم !

موفق و موید ...
 

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
به نقل از EndOfCsharp :
البته بنده بعید میدونم که کاربری مثلا بخواهد عبارتی مثلی HTML یا span یا .. را در سایت شما جستجو کند !!!

در دات نت این کار به سادگی قابل انجام است که اگر کمی صبر کنید بنده کد آن را برایتان خواهم گذاشت !!! چون خودم مدتها پیش به این مشکل برخورده بودم و باید کد مربوطه را پیدا کنم !

موفق و موید ...



پيشاپيش از شما تشكر مي كنم :D :D :D :D :D :D :D :D :D :D :D :D :D


در ضمن H_R عزيز اگه ممكنه درباره Stored Procedure كمي بيشتر توضيح بدهيد .

ممنون:D :D :D :D :D :D :D :D :D :D
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
41
محل سکونت
نصف جهان
من به جای حسین آقا توضیح میدم (حسین جان شرمنده ما پا توی کفشت میکنیم !!!!)

stored procedure ها ، همان دستورات SQL هستند که به صورت یک برنامه کمکی در دیتابیس ذخیره میگردند. کاری که شما میکنید این است که آنها را فراخوانی میکنید و از خروجی های آنها استفاده مینمایید.

هر دستور Sql هنگام ارسال به دیتابیس و اجرا 3 مرحله Parse ، و Compile و Optimize را سپری میکند.
در حالی stored procedure ها فقط یک بار این 3 مرحله را طی میکنند و در مراحل بعدب فقط اجرا میگردند.

استفاده از stored procedure ها سرعت را بسیار بسیار بالا می برد و شدیدا توصیه میشود
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
به نقل از H_R :
plus جاین اینجوری باید تمام فیلد ها رو که میخوای بگردی یه دفه بیاری روی سرور درسته ؟
اگه اینجوری باشه خیلی منابع زیادی رو از سرور مصرف میکنه فکر کن 250000 رکورد رو میخوای سرچ کنی ! اصلا دلم نمیخواد فکرش رو بکنم :happy:
#C هم اگه بخوایم این کار رو بکنیم همین آشه و همین کاسه تنها راه اینه که برین سراغ استورد پروسیجر !
آره فکر اینجاش رو نکرده بودم!:happy: حالا چجوریاست کار با اینی که گفتی؟ آخرش با این روش باید یه جوری تگ های اضافه رو بپرونیم دیگه؟
 

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
به نقل از EndOfCsharp :
من به جای حسین آقا توضیح میدم (حسین جان شرمنده ما پا توی کفشت میکنیم !!!!)

stored procedure ها ، همان دستورات SQL هستند که به صورت یک برنامه کمکی در دیتابیس ذخیره میگردند. کاری که شما میکنید این است که آنها را فراخوانی میکنید و از خروجی های آنها استفاده مینمایید.

هر دستور Sql هنگام ارسال به دیتابیس و اجرا 3 مرحله Parse ، و Compile و Optimize را سپری میکند.
در حالی stored procedure ها فقط یک بار این 3 مرحله را طی میکنند و در مراحل بعدب فقط اجرا میگردند.

استفاده از stored procedure ها سرعت را بسیار بسیار بالا می برد و شدیدا توصیه میشود


اون تابع كه دنبالش بودي چي شد ، بي خيال stored procedure :D :D :D من منتظرم .:wacko: :wacko:
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
به نقل از plus :
آره فکر اینجاش رو نکرده بودم!:happy: حالا چجوریاست کار با اینی که گفتی؟ آخرش با این روش باید یه جوری تگ های اضافه رو بپرونیم دیگه؟

یه راه دیگش هم که خیلی جالب نیست اینه که وقتی اطلاعات رو توی دیتابیس میریزم توی یک فیلد جدا اون رو به طوری تکست هم بریزیم.یعنی هم به صورت اچ تی ام ال هم به صورت تکست ذخیره بشن که موقع سرچ بریم سراغ تکست...
 

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
به نقل از plus :
یه راه دیگش هم که خیلی جالب نیست اینه که وقتی اطلاعات رو توی دیتابیس میریزم توی یک فیلد جدا اون رو به طوری تکست هم بریزیم.یعنی هم به صورت اچ تی ام ال هم به صورت تکست ذخیره بشن که موقع سرچ بریم سراغ تکست...


نه همین طور که گفتی کار جالبی نیست باید یه مشکلو اصولی حلش کرد تصور کن که بخوای یه سفارش از کسی


بگیری اون وقت مطمئنن با مشکل بر می خوری :( :( :( :( :( :(


در ضمن برای stored procedure اگه مرجعی چیزی دارید معرفی کنید :blush: :blush: :blush:​
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
مطمئن نیستم که این استورد پروسیجر بهترین چیزی باشه که وجود داره ولی خوب حد اقل یه سرنخ دستمون میده :

کد:
-- This table contains the tags to be replaced. The % in <head%>
-- will take care of any extra information in the tag that you needn't worry
-- about as a whole. In any case, this table contains all the tags that needs
-- to be search & replaced.
create table #html ( tag varchar(30) )
insert #html values ( '<html>' )
insert #html values ( '<head%>' )
insert #html values ( '<title%>' )
insert #html values ( '<link%>' )
insert #html values ( '</title>' )
insert #html values ( '</head>' )
insert #html values ( '<body%>' )
insert #html values ( '</html>' )
go
-- A simple table with the HTML strings
create table #t ( id tinyint identity , string varchar(255) ) 
insert #t values (
--     '<HTML><HEAD><TITLE>Some Name</TITLE>
<LINK REL="stylesheet" HREF="/style.css" TYPE="text/css" ></HEAD>
<BODY BGCOLOR="FFFFFF" VLINK="#444444">
Some HTML text after the body</HTML>'
)
insert #t values (
'<HTML><HEAD><TITLE>Another Name</TITLE>
--     
<LINK REL="stylesheet" HREF="/style.css"></HEAD>
<BODY BGCOLOR="FFFFFF" VLINK="#444444">Another HTML text after the body</HTML>'
)
go
-- This is the code to strip the tags out.
-- It finds the starting location of each tag in the HTML string ,
-- finds the length of the tag with the extra properties if any. This is
-- done by locating the end of the tag namely '>'. The same is done
-- in a loop till all tags are replaced.


    begin tran
    while exists(select * from #t join #html on patindex('%' + tag + '%' , string ) > 0 )
    	update #t
    	set string = stuff( string , patindex('%' + tag + '%' , string ) ,
    				charindex( '>' , string , patindex('%' + tag + '%' , string ) )
    				- patindex('%' + tag + '%' , string ) + 1 , '' )
    	from #t join #html
    	on patindex('%' + tag + '%' , string ) > 0
    select * from #t
    rollback

بگردید منم میگردم ببنیم چیز بهتری پیدا میشه !؟!
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
هادی جان روشی که گفتم هیچوقت مشکلی ایجاد نمیکنه فقط اشکالش اینه که یکم حجم دیتابیس بیشتر میشه...
حسین جان فکر نمیکنم این روش همه ی تگ ها رو پوشش بده.نه؟ ولی میشه گسترشش داد...
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
آزا تا جایی که من میدونم سر و ته یه صفحه رو میزنه و فرض شده که وسطش متن خالی اه ! احتمالا بشه گسترشش داد در ضمن اون روشی هم که تو میگی خیلی بد نیست ولی خوب فقط در صورتی که واقعا هیچ راهی نباشه ، چون فکر نکنم دونه دونه تگ های html رو هم از هر فیلد جدا کردن خیلی بهتر از یه بار تکست خالی ذخیره کردن باشه فکر کن 500000 تا رکورد داری حالا میخوای هی دونه دونه ازشون اینا رو در بیاری ! ای بابا کی میره این همه راهو سرور مرد !
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
آزا ؟ :D
آره خوب ولی در عوض این روش استاندارده و همه ی تگ ها رو در بر میگیره.من منظورم این بود که از همون اول که اطلاعات میخوان ذخیره بشن 2 مدل ذخیره بشن اما وقتی قبلا به صورت اچ تی ام ال ذخیره شدن دیگه درست کردن فیلد تکست وقت میبره.اما در عوض دیگه موقع سرچ لازم نیست اون کد رو اجرا کنن و تک تک تگ ها رو در بیارن فکر کنم اونجوری بیشتر پدر سرور در بیاد.برای 500000 تا رکورد جدا کردن تک تک تگ ها بازم با احتمال اشتباه شدن!
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
آزا دیگه :D
منم دارم همین رو میگم :blush: دو دفعه سیوش باید بکنیم !
 
بالا