<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>VitCon&#039;s Space</title>
	<atom:link href="http://www.vcprojects.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vcprojects.com</link>
	<description>acknowledgement is existence</description>
	<lastBuildDate>Thu, 08 Jul 2010 07:47:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>So sánh các thuật toán tìm kiếm chuỗi</title>
		<link>http://www.vcprojects.com/2010/07/01/so-sanh-cac-thuat-toan-tim-kiem-chuoi/</link>
		<comments>http://www.vcprojects.com/2010/07/01/so-sanh-cac-thuat-toan-tim-kiem-chuoi/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 11:05:48 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Học tập]]></category>
		<category><![CDATA[Knuth-Morris-Pratt]]></category>
		<category><![CDATA[Naïve Search]]></category>
		<category><![CDATA[Rabin-Karp]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/07/01/so-snh-cc-thu%e1%ba%adt-ton-tm-ki%e1%ba%bfm-chu%e1%bb%97i/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="580" height="600"><param name="source" value="http://www.vcprojects.com/wp-content/uploads/2010/07/StringSearcher.xap" /><param name="onError" value="onSilverlightError" /><param name="background" value="white" /><param name="minRuntimeVersion" value="4.0.50401.0" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=4.0.50401.0" style="text-decoration: none"> 		<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none" /> 	</a> </object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/07/01/so-sanh-cac-thuat-toan-tim-kiem-chuoi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logo ITICup</title>
		<link>http://www.vcprojects.com/2010/06/29/logo-iticup/</link>
		<comments>http://www.vcprojects.com/2010/06/29/logo-iticup/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 21:35:56 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Thi cử]]></category>
		<category><![CDATA[iticup]]></category>
		<category><![CDATA[logo]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/06/29/logo-iticup/</guid>
		<description><![CDATA[Lần 1 Năm 2009 Đầy đủ Thu gọn Ý nghĩa: Sử dụng 3 mảng màu Red – Green – Blue (hệ màu chuẩn của máy tính) để thể hiện đây là sự kiện đặc trưng về tin học. Cách sắp xếp mảng màu: Blue là màu của hy vọng, Red là màu của quyết tâm, [...]]]></description>
			<content:encoded><![CDATA[<table width="1347">
<tbody>
<tr>
<td>Lần 1          <br />Năm 2009</td>
<td>Đầy đủ          <br /><a href="http://www.vcprojects.com/wp-content/uploads/2010/06/iticup.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iticup" border="0" alt="iticup" src="http://www.vcprojects.com/wp-content/uploads/2010/06/iticup_thumb.png" width="244" height="135" /></a>
<p>Thu gọn            <br /><a href="http://www.vcprojects.com/wp-content/uploads/2010/06/iticup_short.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iticup_short" border="0" alt="iticup_short" src="http://www.vcprojects.com/wp-content/uploads/2010/06/iticup_short_thumb.png" width="244" height="124" /></a></p>
<p><strong>Ý nghĩa:</strong></p>
<ul>
<li>Sử dụng 3 mảng màu Red – Green – Blue (hệ màu chuẩn của máy tính) để thể hiện đây là sự kiện đặc trưng về tin học. </li>
<li>Cách sắp xếp mảng màu: Blue là màu của hy vọng, Red là màu của quyết tâm, Green là màu của sự sinh sôi phát triển. Cuộc thi đưa ra một đỉnh cao tri thức và các thí sinh đăng ký tham gia với hy vọng chinh phục được đỉnh cao này. Để làm được điều đó, thí sinh phải quyết tâm rèn dũa, chiến đấu với bản thân và thi đua với các thí sinh khác. Qua quá trình tôi luyện, kiến thức đâm hoa kết trái và thí sinh hoàn thiện hơn tri thức của mình. </li>
<li>Màu vàng tượng trưng vinh quang và sự sáng tạo. Cúp vàng vừa là mục tiêu, vừa là phương tiện giúp thí sinh đi đến được thành công. </li>
<li>3 chữ I, T, I là viết tắt của Information Technology Innovation (sáng tạo trong công nghệ thông tin) </li>
<li>Chữ I cuối cùng trong cụm từ ITI được cách điệu thành hình người để khẳng định con người là nhân tố chủ thể của sự sáng tạo và quyết định sự thành công. </li>
</ul>
</td>
</tr>
<tr>
<td>Lần 2          <br />Năm 2010</td>
<td>
<p><a href="http://www.vcprojects.com/wp-content/uploads/2010/07/Logo_ITICup2010.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Logo_ITICup2010" border="0" alt="Logo_ITICup2010" src="http://www.vcprojects.com/wp-content/uploads/2010/07/Logo_ITICup2010_thumb.png" width="244" height="86" /></a></p>
<p><strong>Ý nghĩa:</strong></p>
<ul>
<li>Logo mang tên đầy đủ của một cuộc thi &quot;ITICup2010&quot;</li>
<li>Trước logo là một biểu tượng của một con đường hướng ra xa, ý muốn gửi vào đây sự hoài bảo, vững chắc và luôn hướng vào một tương lai tốt đẹp, hướng về thời đại mà hẵn sẽ không ngừng phát triễn về CNTT, đồng thời cũng mở ra cho CNTT Việt Nam một tiềm năng mới đễ sánh với các nước khác trên thế giới.</li>
<li>Biểu tượng màu vàng như một chiếc cup, một điều gì đó mà các bạn tham dự cuộc thi cần hướng tới, trên đầu chiếc cup có một biểu tượng gắn liền giống như khẳng định thêm cho ngành CNTT Việt Nam trong con mặt của bè bạn quốc tế.</li>
<li>Màu sắc được thể hiện nói lên sự niềm tin của tuổi trẻ, sự khác khao của chiến thắng và đỉnh điểm của sự thăng hoa.</li>
</ul>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/06/29/logo-iticup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lucene làm được gì?</title>
		<link>http://www.vcprojects.com/2010/06/23/lucene-lam-duoc-gi/</link>
		<comments>http://www.vcprojects.com/2010/06/23/lucene-lam-duoc-gi/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 10:41:22 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/06/23/lucene-lm-d%c6%b0%e1%bb%a3c-g/</guid>
		<description><![CDATA[Những người mới bắt đầu làm quen với Lucene thường nhầm lẫn nó là ứng dụng sẵn sàng để sử dụng, như một chương trình tìm kiếm file, một web crawler, một web search engine, đó đều không phải là Lucene. Lucene đơn thuần là một thư viện phần mềm, một bộ công cụ chứ [...]]]></description>
			<content:encoded><![CDATA[<p>Những người mới bắt đầu làm quen với Lucene thường nhầm lẫn nó là ứng dụng sẵn sàng để sử dụng, như một chương trình tìm kiếm file, một web crawler, một web search engine, đó đều không phải là Lucene. Lucene đơn thuần là một thư viện phần mềm, một bộ công cụ chứ không phải là một ứng dụng tìm kiếm có đầy đủ tính năng. Nó tập trung vào 2 quá trình indexing và searching và nó thực hiện 2 công việc này rất tốt, ngoài ra nó không hỗ trợ gì hơn. Lucene cho phép ứng dụng tự do làm việc với những qui luật nghiệp vụ đặc thù, trong khi giấu đi sự phức tạp đối với indexing và searching bên dưới các API đơn giản để sử dụng. Lucene là phần lõi và chương trình tìm kiếm là vỏ bọc bên ngoài.</p>
<p><span id="more-635"></span></p>
<p>Lucene có thể đánh chỉ mục và làm cho văn bản được rút trích trở nên tìm kiếm được. Như hình 1 đã cho thấy, Lucene không quan tâm đến nguồn dữ liệu là gì, định dạng của nó ra sao, hay ngôn ngữ của nó là gì, miễn là có cách nào đó để tách phần văn bản ra từ nó. Điều đó có nghĩa là không có vấn đề gì trong việc đánh chỉ mục và tìm kiếm dữ liệu lưu trong các file: trang web từ xa, tài liệu trong hệ thống file cục bộ, các file text đơn giản, tài liệu Microsoft Word, file XML, HTML hoặc PDF, hay những định dạng nào mà có thể cung cấp thông tin văn bản, như tin nhắn, email, các đoạn chat, trang Wiki, mailling list.</p>
<p>Tương tự, với sự giúp đỡ của Lucene, người dùng có được sự trải nghiệm phong phú trong việc tìm kiếm toàn văn mà nhiều database không hỗ trợ hoặc hỗ trợ ở mức căn bản có giới hạn. Một khi tích hợp Lucene, người dùng có thể thực thi tìm kiếm bằng các câu truy vấn như <em>+George +Rice -eat –pudding</em>, <em>Apple -pie +Tiger</em>, <em>animal:monkey AND food:banana</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/06/23/lucene-lam-duoc-gi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lucene là gì?</title>
		<link>http://www.vcprojects.com/2010/06/23/lucene-la-gi/</link>
		<comments>http://www.vcprojects.com/2010/06/23/lucene-la-gi/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 10:34:59 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/06/23/lucene-l-g/</guid>
		<description><![CDATA[Lucene là một thư viện truy vấn thông tin (Information Retrieval – IR) có hiệu năng cao và mềm dẻo. Truy vấn thông tin liên quan đến quá trình tìm kiếm thông tin nằm trong tài liệu hoặc siêu dữ liệu mô tả tài liệu. Lucene cho phép thêm tính năng tìm kiếm vào trong [...]]]></description>
			<content:encoded><![CDATA[<p>Lucene là một thư viện truy vấn thông tin (Information Retrieval – IR) có hiệu năng cao và mềm dẻo. Truy vấn thông tin liên quan đến quá trình tìm kiếm thông tin nằm trong tài liệu hoặc siêu dữ liệu mô tả tài liệu. Lucene cho phép thêm tính năng tìm kiếm vào trong ứng dụng. Nó là một dự án mã nguồn mở, miễn phí và ổn định, được cài đặt bằng ngôn ngữ Java, và là một dự án thành viên của Apache Software Foundation, phân phối dưới giấy phép Apache Software License. Do đó, trong những năm gần đây, Lucene là thư viện IR phổ biến nhất được sử dụng.</p>
<p><span id="more-633"></span></p>
<p>Lucene cung cấp một giao diện lập trình ứng dụng (API) đơn giản nhưng mạnh mẽ, không đòi hỏi người dùng phải có quá nhiều kiến thức về kỹ thuật full text search. Để tích hợp Lucene vào ứng dụng, người dùng chỉ cần học cách sử dụng một số class cơ bản. Do Lucene là một thư viện Java, nó cho phép đánh chỉ mục và tìm kiếm tất cả thông tin dưới dạng văn bản, đây là ưu điểm khiến nó được cài đặt trong vô số các ứng dụng, điển hình là Mac OS X Finder, Apple’s iTunes, Wikipedia. Nó có thiết kế nhỏ gọn, đơn giản, cho phép nhúng trên nhiều môi trường như web và desktop.</p>
<p>Ngoài thư viện lõi của Lucene, lập trình viên còn được cung cấp thêm nhiều tiện ích thông qua các gói mở rộng, đóng vai trò như add-on chức năng. Một vài trong số chúng hầu như có mặt trong tất cả các ứng dụng, như gói spellchecker và gói highlighter. Các gói này được gom lại trong một khu vực riêng biệt gọi là “contrib”.</p>
<p>Website của Lucene (<a href="http://lucene.apache.org/java">http://lucene.apache.org/java</a>) là nơi lý tưởng để bắt đầu học cách sử dụng. Tại đây có các bài giảng, javadocs cho Lucene API, hệ thống theo dõi tính năng, các bản phân phối, Lucene Wiki (<a href="http://wiki.apache.org/lucene-java">http://wiki.apache.org/lucene-java</a>) chứa nhiều trang hướng dẫn từ cộng đồng.</p>
<p>Lucene tồn tại ở khắp mọi nơi, cho dù đa số người dùng không hề biết: etFlix, Digg, MySpace, LinkedIn, FedEx, Apple, Ticketmaster, SalesForce.com, Encyclopedia Britannica CD-ROM/DVD, Eclipse IDE, Mayo Clinic, tạp chí New Scientist, Atlassian (Jira), Epiphany, MIT’s OpenCourseware, DSpace và nền tảng Akamai’s EdgeComputing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/06/23/lucene-la-gi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Các quá trình khác</title>
		<link>http://www.vcprojects.com/2010/06/06/cac-qua-trinh-khac/</link>
		<comments>http://www.vcprojects.com/2010/06/06/cac-qua-trinh-khac/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 17:33:00 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/06/06/cc-qu-trnh-khc/</guid>
		<description><![CDATA[Một search engine đầy đủ các tính năng, đặc biệt là chạy trên website, ngoài crawling, indexing và searching, thì một engine cũng cần phải có: · Administration: theo dõi trạng thái của ứng dụng, cấu hình các thành phần khác nhau, chạy và dừng các máy chủ. · Analytics: thống kê người dùng đang [...]]]></description>
			<content:encoded><![CDATA[<p>Một search engine đầy đủ các tính năng, đặc biệt là chạy trên website, ngoài crawling, indexing và searching, thì một engine cũng cần phải có:</p>
<p>· Administration: theo dõi trạng thái của ứng dụng, cấu hình các thành phần khác nhau, chạy và dừng các máy chủ.</p>
<p>· Analytics: thống kê người dùng đang tìm kiếm gì, đưa ra lời hướng dẫn xem cái gì đang hoạt động và cái gì không.</p>
<p>· Scaling: đối với một ứng dụng tìm kiếm lớn, việc mở rộng theo cả khối lượng nội dung và số lượng yêu cầu tìm kiếm đồng thời là tính năng quan trọng.</p>
<p><span id="more-628"></span></p>
<h5><a name="AdministrationInterface">1. Administration Interface</a></h5>
<p>Search engine hiện đại là một phần mềm rất phức tạp và có vô số tính năng cần phải được cấu hình. Đối với crawler dùng để khai phá nội dung, administration interface phải cho phép đặt các URL gốc, tạo quy luật quyết định site nào crawler nên đến, những loại document nào nó nên duyệt qua, thời gian cho phép để đọc một document là bao lâu. Một số ví dụ khác có thể kể đến như mở, tắt máy chủ, quản lý các bản tái tạo (dùng để tăng mức độ sẵn sàng), tạo search log, kiểm tra toàn bộ sức khỏe của hệ thống, tạo và phục hồi các bản sao lưu.</p>
<p>Trong quá trình indexing, search engine có thể cho phép tinh chỉnh dung lượng RAM được sử dụng cho vùng nhớ đệm, số lượng các segment trộn cùng lúc, mức độ thường xuyên để cập nhật các thay đổi, hoặc khi nào tối ưu và xóa bỏ các chỉ mục. Administration interface cũng tổng kết một vài thông tin cơ bản về chỉ mục như đếm các segment và số lượng các phép xóa đang chờ thực hiện. Nếu có bất kỳ document nào gặp vấn đề khi đánh chỉ mục, hoặc câu truy vấn nào gặp lỗi ngoại lệ khi tìm kiếm thì cũng cần được hiển thị cho quản trị viên biết.</p>
<p>Nhiều ứng dụng tìm kiếm, ví dụ như trên desktop không cần thành phần giao diện quản trị. Ngược lại, những ứng dụng tìm kiếm trong doanh nghiệp lại có giao diện quản trị rất phức tạp được xây dựng trên nền web, hoặc bằng một số công cụ dòng lệnh.</p>
<h5><a name="AnalyticsInterface">2. Analytics Interface</a></h5>
<p>Analytics interface thường được xây dựng dưới dạng web, chạy trên một máy chủ riêng, đóng vai trò như một bộ máy chuyên lập báo cáo. Việc phân tích dữ liệu tìm kiếm rất quan trọng, bởi vì nó giúp cho quản trị viên học được nhiều điều từ người dùng, điển hình như tại sao khách hàng lại mua hoặc không mua hàng hóa thông qua website, bằng cách theo dõi search log. Sự triển khai một search engine tốt mang lại khả năng khai phá dữ liệu cao. Website thương mại điện tử có thể từ thông tin tìm kiếm của người dùng – như những lần tìm kiếm nào chưa đem lại kết quả thỏa mãn, những kết quả nào được click, những sản phẩm nào được mua hoặc chưa mua sau mỗi lần tìm – để tối ưu trải nghiệm mua sắm.</p>
<h5><a name="Scaling">3. Scaling</a></h5>
<p>Khó khăn đặc biệt cho ứng dụng tìm kiếm là mở rộng về qui mô. Phần lớn các ứng dụng không có đủ nội dung cũng như lượng truy cập đồng thời để qui mô vượt quá một máy tính. Những ứng dụng lớn đặt ra yêu cầu sử dụng 2 hay nhiều máy tính riêng biệt để không bao giờ gặp lỗi (không có thời gian chết), hoặc có thể lấy một phần nội dung để bảo trì, nâng cấp mà không ảnh hưởng đến hệ thống.</p>
<p>Có 2 yếu tố cần được mở rộng: khối lượng nội dung và thông lượng truy vấn.</p>
<p>· Một khối lượng khổng lồ về nội dung cần phải được chia thành các mảnh nhỏ, sao cho mỗi máy tính tìm kiếm trên một mảnh. Máy chủ truy vấn gửi lệnh tìm kiếm tới tất cả các mảnh, sau đó tổng hợp các kết quả trả về thành một tập hợp kết quả duy nhất.</p>
<p>· Trong trường hợp thông lượng truy vấn trong thời gian đỉnh điểm là rất cao, biện pháp đặt ra là cài đặt bản tái tạo của chỉ mục trên nhiều máy tính khác nhau. Lúc này, máy chủ truy vấn sẽ cân bằng tải bằng cách gửi yêu cầu đến máy tính đang có ít công việc nhất.</p>
<p>Thông thường web search engine đòi hỏi mở rộng cả 2 yếu tố, do đó phải kết hợp cả 2 giải pháp nêu trên, chúng đều yêu cầu chia sẻ các bản sao chỉ mục trên nhiều máy tính.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/06/06/cac-qua-trinh-khac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Searching</title>
		<link>http://www.vcprojects.com/2010/06/05/searching/</link>
		<comments>http://www.vcprojects.com/2010/06/05/searching/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 17:25:49 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>
		<category><![CDATA[build query]]></category>
		<category><![CDATA[render results]]></category>
		<category><![CDATA[run query]]></category>
		<category><![CDATA[user interface]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/06/05/searching/</guid>
		<description><![CDATA[Searching là quá trình dò tìm từ hay cụm từ trong các chỉ mục để xác định những document nào chứa chúng. Chất lượng của công việc tìm kiếm này được đánh giá bởi thang đo recall và precision. Recall cho biết hệ thống tìm ra những document có liên quan tốt như thế nào, [...]]]></description>
			<content:encoded><![CDATA[<p>Searching là quá trình dò tìm từ hay cụm từ trong các chỉ mục để xác định những document nào chứa chúng. Chất lượng của công việc tìm kiếm này được đánh giá bởi thang đo recall và precision. Recall cho biết hệ thống tìm ra những document có liên quan tốt như thế nào, trong khi precision cho biết khả năng của hệ thống loại bỏ các document không thích hợp.</p>
<p>Tuy nhiên, còn có những yếu tố khác cũng quan trọng không kém đối với quá trình searching. Như đã trình bày, tốc độ và khả năng tìm kiếm trên một khối lượng lớn văn bản là 2 trong số các yếu tố đó. Ngoài ra còn có thể kể đến như tính năng hỗ trợ câu truy vấn đơn và kép, wildcard, truy vấn mờ, xếp hạng kết quả, sắp xếp trên dữ liệu trả về, độ thân thiện của cú pháp truy vấn.</p>
<p>Searching trải qua 4 bước cơ bản: user interface, build query, run query và render results.</p>
<p> <span id="more-625"></span>
</p>
<h5><a name="UserInterface">1. User Interface</a></h5>
<p>User interface là những gì người dùng thật sự nhìn thấy trên trình duyệt web, ứng dụng desktop, thiết bị di động khi họ tương tác với chương trình search. Đứng trên phương diện người dùng, đây là phần quan trọng nhất của search engine. Có thể kiến trúc bên dưới của search engine được thiết kế rất tốt, nhưng nếu phần giao diện bị lỗi, người dùng sẽ gặp khó khăn khi sử dụng dịch vụ, kết quả là họ nhanh chóng từ bỏ và bắt đầu chuyển sang một search engine khác thuận tiện hơn.</p>
<p>Một số mẹo để xây dựng user interface hiệu quả là:</p>
<p>· Giữ giao diện ở mức đơn giản, không hiển thị quá nhiều tùy chọn cấp cao ngay trang đầu tiên.</p>
<p>· Bảo đảm rằng người dùng luôn nhìn thấy search box nổi bật mỗi khi họ cần dùng, hơn là yêu cầu họ click và đường link để vào trang search (đây là một lỗi thường gặp).</p>
<p>· Không đánh giá thấp tầm quan trọng của việc trình diễn kết quả. Cụ thể là đừng sa đà vào việc đánh dấu so khớp trong tiêu đề và đoạn trích, hay sử dụng font chữ nhỏ và đưa quá nhiều văn bản trích dẫn.</p>
<p>· Đưa thứ tự sắp xếp và những tính năng thú vị của search engine (khả năng tìm kiếm từ đồng nghĩa, tự động sửa lỗi chính tả, thay đổi thứ tự kết quả theo địa phương) lên phía đầu để người dùng có thể tắt đi khi cần.</p>
<p>· Tự sử dụng thử nghiệm search engine trước khi công bố để biết những thế mạnh và hạn chế của nó. Lưu ý rằng nếu người dùng sử dụng search engine và gặp bất kì lỗi kỹ thuật hay nội dung nào, thì họ sẽ lập tức ra đi và không còn cơ hội để lấy lại lòng tin của họ.</p>
<h5><a name="BuildQuery">2. Build Query</a></h5>
<p>Khi sử dụng search engine, người dùng sử dụng biểu mẫu HTML hoặc AJAX để gửi lên câu truy vấn dưới dạng các từ khóa. Bước build query có nhiệm vụ chuyển câu truy vấn này thành đối tượng query.</p>
<p>Đối tượng query đôi khi rất đơn giản hoặc rất phức tạp. Nó có thể chứa các phép luận lý, truy vấn theo nhóm từ (đặt trong cặp dấu ngoặc kép), thuật ngữ wildcard. Nếu ứng dụng có giao diện cho phép người dùng điều khiển quá trình tìm kiếm, hoặc có những ràng buộc thú vị thì phải cài đặt những tính năng này thành đối tượng query tương đương. Ví dụ, nếu có ràng buộc giới hạn tập hợp document người dùng được xem, thì nó phải được cài đặt thành bộ lọc trên query.</p>
<p>Nhiều ứng dụng thay đổi search query để thực hiện chức năng boosting hoặc filtering ngay tại bước này thay vì trong quá trình indexing. Thông thường các website thương mại điện tử sẽ tăng thứ hạng của các sản phẩm mang lại lợi ích cao, và lọc bỏ những sản phẩm không còn hàng (để khách hàng không nhìn thấy là sản phẩm đã hết hàng và họ sẽ đi mua ở nơi khác). Tránh sự lạm dụng boosting và filtering vì người dùng sẽ nhận ra và mất tin tưởng vào search engine.</p>
<h5><a name="RunQuery">3. Run Query</a></h5>
<p>Đây là bước tra cứu chỉ mục và tìm lại những document khớp với query, sắp xếp chúng theo thứ tự được yêu cầu. Bước này là phần xử lý rất phức tạp được cài đặt bên dưới search engine. Trên lý thuyết, có 3 mô hình tìm kiếm phổ biến sau:</p>
<p>· Mô hình thuần luận lý: document chỉ được xét là khớp hay không khớp với query được cung cấp, không xét đến vấn đề tính điểm. Mô hình này không gán điểm số tương thích cho từng document, do đó kết quả không được sắp xếp theo bất kỳ thứ tự nào. Mỗi câu truy vấn chỉ đơn giản trả về một tập hợp các document.</p>
<p>· Mô hình không gian vector: Cả query và document được mô hình hóa thành các vector ở không gian đa chiều, mỗi từ là một chiều. Độ tương thích, sự giống nhau giữa query và document được tính toán bằng khoảng cách giữa hai vector đó.</p>
<p>· Mô hình xác suất: Tính toán mức độ khớp nhau giữa một document với một query sử dụng giải pháp xác suất.</p>
<h5><a name="RenderResults">4. Render Results</a></h5>
<p> Khi đã có danh sách các document khớp với query, được sắp xếp đúng theo như yêu cầu, nhiệm vụ của bước render results là hiển thị chúng một cách trực quan. Giao diện cho việc hiển thị nên đưa ra đường dẫn một cách rõ ràng cho công việc tìm kiếm và các hành động, ví dụ như click để đi đến trang kế tiếp, tinh chỉnh việc tìm kiếm theo cách nào đó, tìm kiếm các document tương tự với một kết quả, tránh cho người dùng rơi vào trạng thái không còn gì để tìm kiếm.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/06/05/searching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Indexing</title>
		<link>http://www.vcprojects.com/2010/05/30/indexing/</link>
		<comments>http://www.vcprojects.com/2010/05/30/indexing/#comments</comments>
		<pubDate>Sun, 30 May 2010 09:43:05 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>
		<category><![CDATA[analyze]]></category>
		<category><![CDATA[index]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/05/30/indexing/</guid>
		<description><![CDATA[Giả dụ có một số lượng lớn các file, và yêu cầu đặt ra là liệt kê những file nào có chứa từ hay cụm từ được cho trước. Làm thế nào viết chương trình để thực hiện yêu cầu này? Một cách dễ dàng nhất mà ai cũng có thể nghĩ ra là lần [...]]]></description>
			<content:encoded><![CDATA[<p>Giả dụ có một số lượng lớn các file, và yêu cầu đặt ra là liệt kê những file nào có chứa từ hay cụm từ được cho trước. Làm thế nào viết chương trình để thực hiện yêu cầu này? Một cách dễ dàng nhất mà ai cũng có thể nghĩ ra là lần lượt duyệt qua tất cả các file và so khớp nội dung với từ khóa. Hướng giải quyết này là hoàn toàn chính xác, tuy nhiên nó chỉ phù hợp khi dung lượng các file là nhỏ, vì tốc độ xử lý của nó phụ thuộc vào độ lớn của các file. Đây là lý do có khái niệm indexing. Giải pháp để tìm kiếm một số lượng lớn văn bản nhanh chóng là đánh chỉ mục cho văn bản và chuyển nó thành định dạng cho phép việc tìm kiếm diễn ra rất mau lẹ, hạn chế sự chậm trễ trong việc duyệt file tuần tự. Quá trình chuyển đổi như trên được gọi là indexing, và kết quả mà nó trả lại được gọi là index.</p>
<p> <span id="more-619"></span>
</p>
<p>Index được xem như cấu trúc dữ liệu cho phép truy cập ngẫu nhiên đến từ hay cụm từ mà nó chứa. Khái niệm này cũng tương tự như chỉ mục ở phần cuối mỗi quyển sách, cho phép định vị các trang thảo luận về một chủ đề cụ thể.</p>
<p>Đi sâu hơn, indexing bao gồm hai bước tuần tự: analyze document và index document. Hai bước này được trình bày rõ hơn sau đây.</p>
<h5><a name="Analyze">1. Analyze Document</a></h5>
<p>Không search engine nào đánh chỉ mục văn bản trực tiếp, thay vào đó, văn bản phải được chia nhỏ thành các thành phần nguyên tử gọi là token. Đó là những gì diễn ra trong bước analyze document. Mỗi token gần giống như một từ trong ngôn ngữ tự nhiên, bước này quyết định làm thế nào chia các field văn bản trong document thành các chuỗi token. Một vài vấn đề thú vị có thể xảy ra như:</p>
<p>· Cách xử lý từ ghép thế nào?</p>
<p>· Có nên tự động sửa lỗi nếu nội dung bị sai chính tả hay không?</p>
<p>· Có nên chèn từ đồng nghĩa vào trong chuỗi token để với từ khóa laptop cũng sẽ trả về các sản phẩm tương đương như netbook hay không?</p>
<p>· Có xem các dạng số ít – số nhiều (cat – cats), hay các thì hiện tại – quá khứ (eat – ate) là một hay không?</p>
<p>· Trong những ngôn ngữ không thuộc dòng Latin, định nghĩa một từ là như thế nào? </p>
<h5><a name="Index">2. Index Document</a></h5>
<p>Đây là bước cuối cùng trong quá trình indexing. Khi chuyển về chuỗi token, document được thêm vào trong index và sẵn sàng để được tìm kiếm. Quá trình indexing chỉ thật sự có ý nghĩa đối với người quản trị hệ thống, là cơ sở để có được những kết quả tốt. Đối với người dùng cuối, họ chỉ quan tâm đến những trải nghiệm và không cần biết bên dưới hệ thống hoạt động như thế nào.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/05/30/indexing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Document</title>
		<link>http://www.vcprojects.com/2010/05/19/build-document/</link>
		<comments>http://www.vcprojects.com/2010/05/19/build-document/#comments</comments>
		<pubDate>Wed, 19 May 2010 03:21:43 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>
		<category><![CDATA[boost]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/05/19/build-document/</guid>
		<description><![CDATA[Sau khi đã lấy được nội dung từ dữ liệu thô, tiếp theo là xây dựng các đơn vị “document” sử dụng cho việc tìm kiếm. Mỗi document là một record bao gồm nhiều field (title, body, abstract, author, url). Document phải được thiết kế cẩn thận, như làm thế nào chia nội dung thành [...]]]></description>
			<content:encoded><![CDATA[<p>Sau khi đã lấy được nội dung từ dữ liệu thô, tiếp theo là xây dựng các đơn vị “document” sử dụng cho việc tìm kiếm. Mỗi document là một record bao gồm nhiều field (title, body, abstract, author, url). Document phải được thiết kế cẩn thận, như làm thế nào chia nội dung thành các record và các field, làm thế nào để tính toán giá trị cho từng field? Thông thường, cách phân chia khá rành mạch, như mỗi email, PDF file hay trang web là một document. Đôi khi tình hình trở nên rối hơn: làm thế nào xử lý attachment trong email? Cách giải quyết là xem phần văn bản trong attachment là một field của email, hay xem attachment là một document riêng và liên kết ngược lại với email?</p>
<p> <span id="more-613"></span>
</p>
<p>Khi đã có bản thiết kế cấu trúc document hợp lý, từ nội dung thu thập được, phần thông tin thuần văn bản được trích ra và gán vào giá trị các field. Không có vấn đề gì khó khăn nếu nội dung đã là một văn bản theo một bảng mã đã được biết trước. Nhưng ngày nay khá nhiều nội dung lại ở dạng nhị phân (PDF, Microsoft Office, Open Office, Adobe Flash, streaming video và audio multimedia) hoặc chứa những thẻ đánh dấu cần phải loại bỏ trước khi tiến hành quá trình indexing (RDF, XML, HTML). Các nội dung này cần phải thông qua một chương trình lọc để lấy được phần văn bản mong muốn trước khi tạo document mới. Tika, một dự án của Apache, hỗ trợ lọc document khá tốt. Nếu nội dung nằm trong database, các dự án như DBSight, Hibernate Search, LuSQL, Compass và Oracle/Lucene đưa ra giải pháp indexing và searching đơn giản, giải quyết đồng thời 2 bước Acquire Content và Build Document.</p>
<p>Tại bước này, thông thường logic nghiệp vụ được áp dụng để sinh ra các field. Điển hình, người ta phân tích ngữ nghĩa của field “body text” để tìm ra các thông tin phụ như tên, địa điểm, ngày, giờ, hoặc kết nối với thông tin từ những nguồn lưu trữ bên ngoài (database) để trộn chúng lại thành một document duy nhất.</p>
<p>Một vấn đề quan trọng được thực hiện tại bước này là đánh giá mức độ ưu tiên của từng document và field. Ví dụ như những document vừa mới được chỉnh sửa thì được ưu tiên hiện ra trước so với những document cũ, hay là đối với email thì ưu tiên tìm kiếm trên field title trước so với field body. Công việc này gọi là boosting tĩnh, vì mức độ ưu tiên được gán như một hằng số ngay khi xây dựng document, khác với boosting động có mức độ ưu tiên được hiệu chỉnh trong quá trình searching. Hầu như tất cả search engine tự động boost các field có độ dài ngắn và ưu tiên chúng hơn những field có độ dài lớn, để khi tìm kiếm một cụm từ khóa thì các kết quả cô đọng nhất sẽ hiện ra trước.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/05/19/build-document/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acquire Content</title>
		<link>http://www.vcprojects.com/2010/05/19/acquire-content/</link>
		<comments>http://www.vcprojects.com/2010/05/19/acquire-content/#comments</comments>
		<pubDate>Wed, 19 May 2010 03:17:12 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>
		<category><![CDATA[crawler]]></category>
		<category><![CDATA[search bot]]></category>
		<category><![CDATA[spider]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/05/19/acquire-content/</guid>
		<description><![CDATA[Đây là bước đầu tiên trong quá trình hoạt động của search engine. Ở bước này, một chương trình tự động (gọi là search bot, crawler hay spider) được sử dụng để download dữ liệu thô từ nguồn dữ liệu, rồi phân tích để lấy ra nội dung. Công việc này đơn giản nếu dữ [...]]]></description>
			<content:encoded><![CDATA[<p>Đây là bước đầu tiên trong quá trình hoạt động của search engine. Ở bước này, một chương trình tự động (gọi là search bot, crawler hay spider) được sử dụng để download dữ liệu thô từ nguồn dữ liệu, rồi phân tích để lấy ra nội dung. Công việc này đơn giản nếu dữ liệu thô là các file theo định dạng XML, còn nguồn dữ liệu là các directory hoặc database có cấu trúc. Nó sẽ phức tạp hơn rất nhiều nếu dữ liệu thô là phi cấu trúc và nguồn dữ liệu bị phân tán khắp mọi nơi (Lotus Domino, Microsoft Exchange, Word document, Excel spreadsheet).</p>
<p> <span id="more-610"></span>
</p>
<p>Một vấn đề cần được quan tâm trong bước này là quyền truy cập nội dung. Ví dụ khi crawl một website phải tuyệt đối tuân thủ quyền riêng tư được định nghĩa trong file robots.txt, hoặc đôi khi muốn scan nội dung của các file thì phải có được quyền của “super user”. Những thông tin về hạn chế truy cập phải được đính kèm với nội dung để khi tìm kiếm thì chỉ hiển thị kết quả đối với những nội dung mà người dùng được phép thấy, và ẩn đi những kết quả mà người dùng không thể truy cập được.</p>
<p>Đối với nguồn dữ liệu lớn và thường xuyên thay đổi, tối ưu hóa crawler là bắt buộc để tăng mức độ hiệu quả của search engine. Crawler phải hoạt động thường trực, theo dõi các dữ liệu thô mới được tạo ra hoặc mới bị thay đổi, đưa chúng vào hàng đợi để phân tích dần dần khi hệ thống rảnh rỗi.</p>
<p>Có nhiều crawler mã nguồn mở (Apache Solr, Nutch, Grub, Heritrix, Apache Droids, Aperture) hỗ trợ tách nội dung từ dữ liệu thô phân tán. Chúng được thiết kế để hỗ trợ kết nối với những nguồn dữ liệu thông dụng (như website, database, CMS, hệ thống file). Đối với những nguồn dữ liệu khác mà chưa có thư viện hỗ trợ, lập trình viên phải tự viết chương trình kết nối và tách nội dung theo giao diện của nguồn dữ liệu đó.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/05/19/acquire-content/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Search engine</title>
		<link>http://www.vcprojects.com/2010/05/19/search-engine/</link>
		<comments>http://www.vcprojects.com/2010/05/19/search-engine/#comments</comments>
		<pubDate>Wed, 19 May 2010 03:13:51 +0000</pubDate>
		<dc:creator>Mai Hoàng Hoài Thương</dc:creator>
				<category><![CDATA[Lucene]]></category>
		<category><![CDATA[crawl]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://www.vcprojects.com/2010/05/19/search-engine/</guid>
		<description><![CDATA[Các quá trình hoạt động của một search engine Search engine là một hệ thống truy vấn thông tin trên máy tính. Các thông tin này có thể tồn tại ở nhiều dạng, như hình ảnh, âm thanh, nhưng đa số là văn bản (email, tài liệu, ebook, trang web). Text search engine sử dụng [...]]]></description>
			<content:encoded><![CDATA[<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">
<p align="center"><a href="http://www.vcprojects.com/wp-content/uploads/2010/05/image4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.vcprojects.com/wp-content/uploads/2010/05/image_thumb4.png" width="104" height="244" /></a> </p>
<p align="center">Các quá trình hoạt động của một search engine</p>
</td>
<td valign="top">
<p>Search engine là một hệ thống truy vấn thông tin trên máy tính. Các thông tin này có thể tồn tại ở nhiều dạng, như hình ảnh, âm thanh, nhưng đa số là văn bản (email, tài liệu, ebook, trang web).</p>
<p>Text search engine sử dụng kỹ thuật full text search, cho phép người dùng nhập vào một vài từ khóa và tìm những văn bản nào có chứa những từ khóa này. Về cơ bản, những engine như vậy đều hoạt động dựa trên 3 quá trình:</p>
<p>- <b>Crawling</b> (Raw Content à Acquire Content à Build Document): Thu thập văn bản từ các dữ liệu dạng thô.</p>
<p>- <b>Indexing</b> (Analyze Document à Index Document): Tìm các từ khóa đặc trưng cho văn bản.</p>
<p>- <b>Searching</b> (User Interface à Build Query à Run Query à Render Results): So khớp từ khóa do người dùng nhập vào với từ khóa đặc trưng để chọn lọc văn bản phù hợp.</p>
</td>
</tr>
</tbody>
</table>
<p> <span id="more-609"></span>
<p>Search engine có mặt ở khắp mọi nơi và có qui mô rất khác biệt nhau. Những general-purpose engine (tìm kiếm tất cả nội dung số) như Google hay Bing có cả trăm ngàn máy chủ hoạt động trên môi trường phân tán, mỗi cụm máy chủ chỉ đảm nhiệm duy nhất một phần công việc cho một quá trình. Ngược lại, những vertical-purpose engine (tìm kiếm đối tượng dữ liệu trên một lĩnh vực cụ thể) thì nhỏ bé hơn, có thể chạy được trên một máy tính cá nhân hoặc có thể được tích hợp vào một phần mềm, ví dụ như tìm kiếm danh bạ trong Outlook, tìm kiếm file trong Windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vcprojects.com/2010/05/19/search-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
