Cấp bậc tác giả:

DATABASE

Xử lý từ khóa tìm kiếm cho bài viết - SQL

Được viết bởi QuangIT ngày 13/08/2012 lúc 07:35 PM
Trong bài viết thương yêu cầu có tìm kiếm từ khóa và mình cần hiển thị cho người dùng biết các từ khóa có liên quan đến bài viết. Bài viết này mình sẽ giới thiệu một cách để thực hiện.
  • 0
  • 11801

Xử lý từ khóa tìm kiếm cho bài viết - SQL

Trong bài viết thương yêu cầu có tìm kiếm từ khóa và mình cần hiển thị cho người dùng biết các từ khóa có liên quan đến bài viết. Bài viết này mình sẽ giới thiệu một cách để thực hiện.
Tuy chưa thực sự tối ưu vì trong thuật toán có dùng con trỏ để tìm kiếm. Nếu có thời gian chịu khó phân tích lại thì sẽ tối ưu thuật toán hơn.
Ví dụ bạn có bài viết được mô tả như sau: 
Bạn sẽ thấy bên dưới phần diễn giải của bài viết có các từ khóa liên quan.
Để làm được điều đó bạn cần tạo một bảng (TB_TuKhoa) để lưu trữ những từ khóa (Gọi nôm na là kho từ khóa). 

CREATE TABLE [dbo].[TB_TuKhoa](
 [idKey] [int] IDENTITY(1,1) PRIMARY KEY  NOT NULL,
 [TuKhoa] [nvarchar](250) NOT NULL,
 [GhiChu] [nvarchar](250) NULL,
) 
 Ví dụ dữ liệu của bạn như sau:
Giờ chúng ta sẽ viết thuật toán để lấy ra các từ khóa.
 Bạn viết 1 hảm để trả về kết quả là từ khóa của bài viết như sau
* Input NoiDung bài viết (Nvarchar)
* Output: Từ khóa liên quan
--Create by hungbv@hmweb.com.vn
CREATE FUNCTION GetKeyword(
 @NoiDung nvarchar(4000)
)
RETURNS NVarChar(4000) 
AS
BEGIN
 DECLARE @KetQua nvarchar(4000) SET @KetQua='Từ khóa: '
 -- Khai báo 1 bảng tạm
 DECLARE @_Table TABLE  (Noidung nvarchar(4000) null)
 INSERT INTO @_Table(Noidung) VALUES (@NoiDung)
 DECLARE @Count int
 --Dùng con trỏ (vòng lặp) để tìm kiếm từ khóa
 DECLARE @TuKhoa Nvarchar(250) 
 DECLARE TuKhoa_Cursor CURSOR FOR 
 SELECT TuKhoa  FROM TB_TuKhoa order by newid()
  OPEN TuKhoa_Cursor 
 FETCH NEXT FROM TuKhoa_Cursor INTO @TuKhoa 
 WHILE @@FETCH_STATUS = 0 
 BEGIN 
 -- Nếu tìm thấy trong nội dung có từ khóa thì cộng thêm kết quả
  SELECT @Count =Count(*) FROM @_Table 
  WHERE Noidung LIKE N'%'+@TuKhoa+'%'
  IF @Count>0
  BEGIN
   SET @KetQua=@KetQua+@TuKhoa+', '
  END
 FETCH NEXT FROM TuKhoa_Cursor INTO @TuKhoa 
 END
 CLOSE TuKhoa_Cursor
 DEALLOCATE TuKhoa_Cursor

RETURN @KetQua
END
 Để sử dụng hàm trên và tránh việc mỗi lần view bài viết bạn lại yêu cầu thực hiện hàm đó thì  trong bảng bài viết (TB_BaiViet) của bạn tạo thêm trường Từ khóa
Dữ liệu trường này = dbo.GetKeyword(NoiDung)

Ví dụ:
SELECT dbo.GetKeyword(N'Bài viết này giới thiệu một số thủ thuật 
và lời khuyên liên quan đến những thắc mắc mà người dùng văn phòng 
thường gặp phải trong quá trình sử dụng Excel, Word.')
Sẽ cho kết quả là:  Từ khóa: WORD, Thủ thuật, EXCEL, lời khuyên, thắc mắc, người dùng , người dùng văn phòng , sử dụng Excel,

Nguồn bài viết: hmweb

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML