ورود

View Full Version : نحوه جستجو در سایت های خبری



ali_mnkt
یک شنبه 24 دی 1391, 20:18 عصر
با سلام
دوستان من می خوام بدونم سیستم جستجو در سایت های خبری به چه صورته ؟ مثلا من می زنم : "قیمت" خوب آیا این کلمه رو می ره تو برچسب های جستجو می کنه ؟ و یا نه در متن تک تک خبر ها می ره می گرده ؟

fakhravari
یک شنبه 24 دی 1391, 23:30 عصر
join و like بین جداول

neda_91
دوشنبه 25 دی 1391, 11:43 صبح
join و like بین جداول

میشه بیشتر توضیح بدید منم خیلی دوست دارم این روش جستجو رو تو سایتم بزارم

b.paseban
دوشنبه 25 دی 1391, 19:47 عصر
سلام بر شما.
شما میتونی توی جدول با استفاده از StoreProcedure زیر دنبال کلمه مورد نظر بگردی .


ALTER PROCEDURE [dbo].[Searchtbls]
@keyword Nvarchar(300)
AS

SELECT 'News.aspx' AS PageName , Tbl_News.Title , Tbl_News.NewsID
FROM Tbl_News
WHERE (Tbl_News.Title LIKE N'%' + @keyword + N'%')

UNION
SELECT 'Article.aspx' AS , Article.Title , Article.ArticleID
FROM Tbl_Article
WHERE (Tbl_Article.Title LIKE N'%' + @keyword + N'%')

RETURN

keyword رو ما از کاربر میگیریم و داخل دو جدول Tbl_News و Tbl_Article جستجو میکنیم البته داخل فیلد Title جداول ذکر شده.
یه فیلد هم ما ایجاد کردیم که صفحه مربوط به همون جدول رو نمایش میده مثلا PageName جدول اولی که Tbl_News هست و مربوط به اخبار هست News.aspx و PageName جدول دومی که Tbl_Article هست و مربوط به اخبار هست Article.aspx .
برای نمایش جستجو توی یه صفحه دیگه به این صورت عمل می کنیم که بعد از کلیک کردن کاربر مقدار درج شده در textbox رو درون یه session ریخته و اون مقدار رو در صفحه ای دیگر مثلا resultsearch.aspx بعنوان keyword که یک پارامتر توی کوئری بالا بود میریزیم .
برای صفحه مبدأ توی رویداد کلیک :


if (Page.IsValid)
{
Session.Add("keyword", txtsearch.Text);
Response.Redirect("~/ResultSearch.aspx");
}

صفحه مقصد resultsearch.aspx با استفاده از یه sqldatasource و یه ListView :


<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1">
<ItemTemplate>
<div class="TitrpreviewnewsSearch" class="TitrpreviewnewsSearch">
<div id="Title">
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("PageName").ToString() + "?ID="+Eval("NewsID").ToString() %>'
Text='<%#Eval("Title")%>' Target="_blank"></asp:HyperLink>
</div>
</div>
</ItemTemplate>
<EmptyDataTemplate>
<div class="Titrpreviewarticle">
جستجوي شما نتيجه اي در بر نداشت.
</div>
</EmptyDataTemplate>
</asp:ListView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommandType="StoredProcedure"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"></asp:SqlDataSource>

توی رویداد loadpage تکه کد زیر رو قرار میدیم :


SqlDataSource1.SelectCommand = "Searchtbls";
SqlDataSource1.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
SqlDataSource1.SelectParameters.Add("keyword", Session["keyword"].ToString().ToLower());
SqlDataSource1.DataBind();

Searchtbls هم نام storeprocedure ما در دیتابیس مربوطه هست.
موفق باشید

ali_mnkt
دوشنبه 25 دی 1391, 23:43 عصر
مرسی از راهنماییتون . پس نظر شما اینه که جستجو فقط در title اخبار انجام بشه ؟ آیا این عاقلانه است که جستجو درون متن تک تک خبر ها نیز انجام بشه ؟

b.paseban
دوشنبه 25 دی 1391, 23:56 عصر
معمولاً سایت های خبری تیتر صفحه رو به ما برمیگردونن چون چکیده اصلی مطلب هست.
از یه طرف دیگه هم زمان جستجو رو کاهش میدیم با این کار.