Incomplete Leo

Something from my heart

eRec search

Chức năng search trong eRec được chia thành 3 phần : simple search, advance search và custom search.

Toàn bộ code cho chức năng simple search và advance search ở trong class UserDAO

1. Simple search :

– Search đơn giản các field trên GUI tương ứng với các field trong DB, chủ yếu trong 2 table về User và Resume

2. Search advance :

– Bao gồm các field như simple search và thêm 1 phần freetext với các option :

  • search all keyword : có chứa tất cả các TỪ được nhập vào free text, không cần theo thứ tự
  • search any keyword : chứa 1 trong các TỪ được nhập vào free text
  • search exact phrase : search chính các CỤM TỪ được nhập vào freetext

3 option trên được thực hiện trên 3 nguồn dữ liệu :

  1. File attach
  2. Các field của table User hoặc Resume được chỉ định trong file config
  3. Các custom field (hay dynamic field) của resume (table [CandidateResumesAddIn])

1. Search trên file attach :

Thực hiện search tìm kiếm các từ khóa trên file attach của user, sử dụng Index Service của Windows để thực hiện việc tìm kiếm trên nội dung của file. Lớp hỗ trợ : QueryManager được cung cấp bởi Mr. Thái (chief Leader of DMS ;)) ) . Xem query syntax của Indexing service trên Google và file Help về Indexing Service. 😀

3 method BuildIndexQueryAllKeywordSearch, BuildIndexQueryAnyKeywordSearch, BuildIndexQueryExactKeywordSearch dùng để build 3 câu query tương ứng với 3 option search ở trên.

Kết quả search này là danh sách các file, từ danh sách các file đó, lấy ra được danh sách user id là owner của các file này dựa vào cơ chế đặt tên theo id của các folder và file đã upload.

2. Các field của table User hoặc Resume được chỉ định trong file config :

BuildAllKeywordsQuery, BuildAnyKeywordsQuery, BuildExactKeywordsQuery là 3 method build 3 câu query tương ứng với 3 option search.

3. Các custom field (hay dynamic field) của resume : câu queryđược build tương tự (2.), nhưng dành cho các custom fiel.

Phần trên là mô tả cách search của mỗi nguồn dữ liệu.

Tiếp theo là cách tiến hành search : Do build câu query động trên code C#, nên bị hạn chế về chiều dài tối đa của param khi truyền xuống store ( chi sủ dụng được nvarchar với max là 4000). Giải pháp là split câu query ra thành nhiều đoạn nhỏ, execute vào 1 bảng tạm, lần lượt cho đến hết. Khi exec xong hết, tiến hành sort trên bảng tạm, rồi paging để trả dữ liệu về. Phần query được split là chuỗi user id có từ (1.). Các câu query được build ra từ (2) và (3) được giữ nguyên và truyền vào spCandidateResumesGetListSearch_ToTable cùng với phần id được split ra. Exec store lặp lại cho đến hết chuỗi user Id. Bảng tạm sẽ chứa đầy đủ kết quả search.

Hàm search chính : SearchCandidateByCriteria , hàm này sẽ rẽ nhánh dựa vào các parameter được truyền vào.

Trên đây là khẩu quyết của 2 bộ võ công tâm pháp thượng thừa mang tên “simple search” và “advance search”. Yêu cầu luyện từng cấp, không được ham đua đòi mà nhảy cấp mà tẩu hỏa nhập ma. Sau khi đã luyện thành 2 bộ tâm pháp này, hãy sang Belgium thọ giáo sư phụ Di Trương bộ tâm pháp còn lại, “custom search”, mức độ khủng khiếp và kinh hoàng không kém gì “advance search”. Luyện xong 3 bộ võ công này xong có thể chịu được Gil BEST được khoảng 100 hiệp :D. Tiếp tục luyện bộ “Thái cực tâm pháp” là có thể xuống núi pyco 😀 . Khẩu quyết bộ võ công này có thể hỏi bác Tuấn, panda có thể chỉ dẫn thêm hoặc giới thiệu sang đệ tử xuất sắc nhất các đời chưởng môn : Mrs Huyền.

Tháng Một 25, 2007 Posted by | Technical, Uncategorized | %(count) bình luận

ASP.NET 2.0 and Url Rewrite – Advance

ASP.NET 2.0 support Url Rewrite : http://aspnet.4guysfromrolla.com/articles/011007-1.aspx

BUT

Several people have asked why the built-in URL Mapper in ASP.NET 2.0 doesn’t support regular expressions. There were actually a few reasons for this — one of the big ones being that just about the time we were about to consider adding it my team started also working on IIS7. We realized that a full-featured version would want/need to take advantage of some of the new features in IIS7 as well as the support all content types (in particular — images and directories). So we postponed making it feature rich until a future version.

It’s a shame given that it only takes 20 lines to support a regex based URL rewriter – and that IIS7 won’t even be launched until Longhorn Server, sometime in 2007 (and even then, most IT depts will wait for SP1 before deploying)
The Whidbey URL mapper was written mid-2003, it’s a shame in the intervening 2 years 20 lines of code couldn’t be written and tested.

AND HERE IS THE REASON :

It only takes 20 lines to support a basic regex based URL rewriter. But if you want it to be secure and scalable it takes a lot more work.
Specifically, you need to do a lot of work to make sure that you aren’t succeptible to denial of service attacks where remote users send urls that cause computationally intensive regex queries to spin your CPUs.
The 20 line sample you have in your website doesn’t deal with this, and probably doesn’t need to if it is only used on the occasional server. But Microsoft can’t get away with that if we install it on 4 million servers (that would be too big a target).

Finally, the solution : http://www.urlrewriting.net/en/Download.aspx

01. Is UrlRewritingNet.UrlRewrite for free?

Yes it is! It can be freely shared and distributed, changed, developed and used for any commercial cases. But we take no warranty for erroless using the software.

02. What is the special about UrlRewritingNet?

It is a rewrite-module tuned for ASP.NET 2.0, and offers support for

  • Themes and Masterpages
  • Regular Expressions
  • good Postback-Urls
  • Cookieless Sessions
  • Runs in Shared-Hosting or Medium-Trust enviroments
  • OutputCache is supported
  • Redirects possible, even to other Domains

The setup is also quick 🙂

03. Is there a Version for ASP.NET 1.1?

No, and is not planned. You can use the original version from Fabrice Marguerie.

04. Are Rewrites possible without a Fileextension?

No, this is not possible without changing the IIS configuration because these requests are directly not handled by ASP.NET 2.0
Yes if you can change the IIS Configuration, take a look the UrlRewritingNet documentation.

Tháng Một 19, 2007 Posted by | ASP.NET 2.0 Related | Bạn nghĩ gì về bài viết này?

ASP.NET 2.0 and Url Rewrite – Simple

Simple approach : http://www.developerfusion.co.uk/show/5302/

A new feature in ASP.NET 2.0 is it’s built-in url rewriting support. When I looked into this new feature i found out it lacked regular expressions support, which is really the point of an Url Mapper. ScottGlu at his blog, explains the reason why the ASP.NET team didn’t implement this featur, basically because they realized that a full featured version would want to take advantage of the next IIS 7.0 new features, specially the support for all content-types (images and directories).

Anyway, it’s really simple to implement a Url Rewriting Module with Regex support in ASP.NET. I wrote a quick and simple HttpModule for this. The whole magic is done within a few lines within the HttpModule :

public void Rewrite_BeginRequest(object sender, System.EventArgs args) {

     string strPath = HttpContext.Current.Request.Url.AbsolutePath;

     UrlRedirection oPR = new UrlRedirection();

     string strURL = strPath;

     string strRewrite = oPR.GetMatchingRewrite(strPath);

     if (!String.IsNullOrEmpty(strRewrite)) {

          strURL = strRewrite;

     } else {

          strURL = strPath;

     }

     HttpContext.Current.RewritePath("~" + strURL);

}
The code is self explanatory. When a request that is processed by

the ASP.NET engine, the module checks an XML for a regex match. I've

seen many Url Rewriting engines that uses Web.config to store the

matching rules but i prefer using an additional XML file. The rewriting

rules file look like the following:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<urlrewrites>

     <rule name="Category Page">

          <url>/([a-zA-Z][\w-]{1,149})\.aspx</url>

          <rewrite>/Default.aspx?Category=$1</rewrite>

     </rule>

     <rule name="Item Page">

          <url>/([a-zA-Z][\w-]{1,149})/([a-zA-Z][\w-]{1,149})\.aspx</url>

          <rewrite>/Default.aspx?Category=$1&Item=$2</rewrite>

     </rule>

</urlrewrites>

The rule matching routine, wich is implemented in the GetMatchingRewrite() method is quite simple and lightweighted:

public string GetMatchingRewrite(string URL)  {
     string strRtrn = "";

     System.Text.RegularExpressions.Regex oReg;

     foreach (RedirectRule oRule in Rules) {

          Reg = new Regex(oRule.URL);
          Match oMatch = oReg.Match(URL);

          if (oMatch.Success)  {
               strRtrn = oReg.Replace(URL, oRule.Rewrite);
          }

     }
     return strRtrn;
}

 Sample here

Tháng Một 19, 2007 Posted by | ASP.NET 2.0 Related | Bạn nghĩ gì về bài viết này?