5/14/2012

ASP.NET: Tạo bộ tìm kiếm gần đúng (tương đối) giống như tamtay.vn, google.com

Default.aspx

<form id="form1" runat="server">
    <div style="text-align: center">
        <span style="color: #ff6600"><strong>TÌM KIẾM TƯƠNG ĐỐI</strong></span><br />
        <span style="font-size: 10pt; font-family: Verdana">
        Nhập từ cần tìm:</span>
        <asp:TextBox ID="TextBox1" runat="server" Width="421px"></asp:TextBox>
        <asp:Button ID="btnSeach" runat="server" Text="Seach" OnClick="btnSeach_Click" /><br />
        <br />
        <hr />
        <asp:Label ID="lblSQL" Text="" runat="server"></asp:Label>
    </div>
    </form>

Default.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
/// Author: Trương Đức Tài
/// 09/11/2009 (dd/mm/yyy)
/// Phone: 0979.116118
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using TimKiemGanDung.Utilities;

namespace TimKiemGanDung
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnSeach_Click(object sender, EventArgs e)
        {
            string keyWord = TextBox1.Text;
            string sql = string.Empty;
               
            sql = SearchApproximate.ApproximateSearch(keyWord);
            lblSQL.Text = sql;

            // Khi có được chuỗi sql như trên các bạn biết phải làm gì rồi chứ?
            // Thanks!
        }
    }
}

SearchApproximate.cs

using System;
using System.Data;
using System.Configuration;
/// Author: Trương Đức Tài
/// 09/11/2009 (dd/mm/yyy)
/// Phone: 0979.116118
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

namespace TimKiemGanDung.Utilities
{
    public class SearchApproximate
    {
        // Phương thức trả về câu lệnh SQL dùng truy vấn dữ liệu
        public static string ApproximateSearch(string keyWord)
        {
            string sql = "SELECT * FROM Employer WHERE FullName LIKE ";
            return sql + "N'" + Exec(keyWord) + "' OR FullName LIKE N'" + Exec(ConvertVN.Convert(keyWord)) + "'";
        }

        // Phương thức chuyển đổi một chuỗi ký tự: Nếu chuỗi đó có ký tự " " sẽ thay thế bằng "%"
        public static string Exec(string keyWord)
        {
            string[] arrWord = keyWord.Split(' ');
            StringBuilder str = new StringBuilder("%");
            for (int i = 0; i < arrWord.Length; i++)
            {
                str.Append(arrWord[i] + "%");
            }
            return str.ToString();
        }
    }
}

ConvertVN.cs

/// Author: Trương Đức Tài
/// 09/11/2009 (dd/mm/yyy)
/// Phone: 0979.116118
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace TimKiemGanDung.Utilities
{
    public class ConvertVN
    {
        // Phương thức Convert một chuỗi ký tự Có dấu sang Không dấu
        public static string Convert(string chucodau)
        {
            const string FindText = "áàảãạâấầẩẫậăắằẳẵặđéèẻẽẹêếềểễệíìỉĩịóòỏõọôốồổỗộơớờởỡợúùủũụưứừửữựýỳỷỹỵÁÀẢÃẠÂẤẦẨẪẬĂẮẰẲẴẶĐÉÈẺẼẸÊẾỀỂỄỆÍÌỈĨỊÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢÚÙỦŨỤƯỨỪỬỮỰÝỲỶỸỴ";
            const string ReplText = "aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAAAAAAAAAAAAAAADEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYY";
            int index = -1;
            char[] arrChar = FindText.ToCharArray();
            while ((index = chucodau.IndexOfAny(arrChar)) != -1)
            {
                int index2 = FindText.IndexOf(chucodau[index]);
                chucodau = chucodau.Replace(chucodau[index], ReplText[index2]);
            }
            return chucodau;
        }
    }
}

Mã nguồn tải tại đây

(Đã hoàn thành 99%, các bạn hãy chạy thử và hoàn thành tiếp bộ tìm kiếm với kết nối CSDL nhé)
Author: Trương Đức Tài

Categories:
If You Enjoyed This Post Please Take 5 Seconds To Share It.

2 comments:

Hay....nhung hoi thieu chut xiu... doi minh lam not roi post len tiep

bạn ơi cho mình hỏi cái code like N'%st%' Nếu st là những từ có âm ô or ò thì nó lại search ko ra kết quả
ví dụ: chuỗi mẹ: ... nhờ pha lập công của abc trong vòng 16m ...
st=nhờ pha lập -> ra kết quả
st=nhờ pha lập công --> ko ra kết quả
st=công --> không ra kết quả
st=ô -->không ra kết quả
st=vòng --> không ra kết quả
st=ò -->không ra kết quả
st=của abc --> ra kết quả

Mong được bạn giúp đỡ

Post a Comment

 
  • I'm a great believer that any tool that enhances communication has profound effects in terms of how people can learn from each other, and how they can achieve the kind of freedoms that they're interested in.

  • Followers