2010-08-16 49 views
6

Tôi có bảng điều khiển phản hồi nơi người dùng có thể viết HTML phản hồi formated sử dụng AJAX HTMLEditorLàm thế nào để lưu dữ liệu HTML trong Sql Server

Tôi muốn lưu dữ liệu HTML này trong SQL server

HTML NGUỒN

This is <span style="font-weight: bold; ">nice</span> question 

HTML OUTPUT

This is nice question 

Bây giờ làm thế nào tôi có thể tìm kiếm cơ sở dữ liệu của tôi nếu tìm thấy của bạn "là tốt đẹp" thì truy vấn của tôi không thể đáp ứng là tốt đẹp bởi vì cơ sở dữ liệu chứa các thẻ HTML quá.

Vì vậy, thực tiễn tốt nhất để lưu và truy xuất dữ liệu HTML bằng cách sử dụng truy vấn SQL & ASP.net là gì.

Trả lời

4

Bạn có thể nhận được một số mileage ra khả năng tìm kiếm toàn văn bản của SQL Server. Dưới đây là một nguồn tài nguyên mô tả các chiến lược để áp dụng tìm kiếm toàn văn văn bản HTML được lưu trữ trong SQL Server:

http://www.developmentnow.com/blog/SQL+Server+2005+Full+Text+Search+On+HTML+Documents.aspx

+0

Liên kết được cung cấp ở trên có các tùy chọn khác nhau và tất cả đều có Mặt cắt/Thu hẹp vì vậy phương pháp tốt nhất và tốt nhất là gì –

+1

@ SOF: Đó là một câu hỏi hợp lý. Tôi e rằng bạn sẽ phải cân nhắc những ưu điểm và nhược điểm trong kịch bản cụ thể của bạn để quyết định liệu việc triển khai này có hợp lý hay không. Tôi tin rằng đó là. Các mệnh đề 'LIKE' rất hạn chế, vì câu hỏi của bạn rất rõ ràng. Chỉ mục toàn văn được triển khai một cách cẩn thận có thể không hoàn hảo, nhưng nó mở rộng ranh giới vượt ra ngoài những gì có thể với các chỉ mục và truy vấn đơn giản hơn. – kbrimington

2

Nếu bạn đang sử dụng SQL Server 2008 thì toàn văn chỉ mục là một lựa chọn tốt. Lưu trữ HTML của bạn trong cột varbinary (max) và đặt loại tệp được liên kết thành ".html" trong cột loại tệp. Trình chỉ mục toàn văn sẽ phân tích dữ liệu dưới dạng HTML và chỉ tìm kiếm nội dung văn bản trong khi bỏ qua các thẻ HTML.

+0

Nice .. Nhưng GoDady cung cấp cho chúng tôi SQL SERVER 2005 –

+0

@SOF Người dùng: Chỉ mục văn bản đầy đủ nằm trong SQL Server 2000 và SQL Server 2005 – gbn

+0

Không chắc chắn liệu SQL Server 2005 có bộ lọc HTML để lập chỉ mục toàn văn hay không, có thể chỉ là một năm 2008 Điều. –

0

Lưu trữ dữ liệu hai lần trong hai cột khác nhau; một lần dưới dạng HTML và một văn bản thuần túy khác. Thực hiện hiển thị từ cột HTML và thực hiện bất kỳ tìm kiếm nào đối với cột văn bản.

+0

Câu trả lời thú vị của nó đã là lựa chọn cuối cùng của tôi :) nhưng tôi không muốn sao chép dữ liệu. –

0

Câu trả lời khác là sử dụng CTE để loại bỏ HTML trước khi thực hiện tìm kiếm.

CTE sau đây trích xuất các hàng có khả năng đáp ứng các tiêu chí tìm kiếm và đệ quy loại bỏ HTML. Truy vấn sau đó sử dụng kết quả của CTE để lọc ra các hàng vẫn chứa HTML và các hàng không khớp chính xác với tiêu chí tìm kiếm.

CTE không phức tạp như mong đợi. Hầu hết các không quan trọng là để đối phó với PATINDEX trở về 0.

--** Test table 
DECLARE @HTML TABLE (id INT IDENTITY, html VARCHAR(max)) 
INSERT INTO @HTML SELECT 'This is a <span style="font-weight: bold; ">nice</span> question'; 
INSERT INTO @HTML SELECT 'The cat sat <span style="font-weight: bold; ">on the</span> mat'; 

--** Search criteria 
DECLARE @Search VARCHAR(50) = 'is a nice'; 

--** CTE to return the matching rows ignoring the HTML 
;WITH Search_CTE (html_id, html_text) 
AS (
    SELECT h.id AS 'html_id' 
     , LEFT(h.html,REPLACE(PATINDEX('%<%',h.html)-1,-1,999999)) + SUBSTRING(h.html,CONVERT(INT,REPLACE(PATINDEX('%>%',h.html)+1,1,999999)),LEN(h.html)) AS 'html_text' 
     FROM @HTML AS h 
    WHERE h.html LIKE '%' + REPLACE(@Search,' ','%') + '%' 
    UNION ALL 
    SELECT c.html_id AS 'html_id' 
     , LEFT(c.html_text,REPLACE(PATINDEX('%<%',c.html_text)-1,-1,999999)) + SUBSTRING(c.html_text,CONVERT(INT,REPLACE(PATINDEX('%>%',c.html_text)+1,1,999999)),LEN(c.html_text)) AS 'html_text' 
     FROM Search_CTE AS c 
    WHERE PATINDEX('%<%',c.html_text) > 0 
) 
SELECT h.html AS 'Original HTML' 
    , cte.html_text AS 'HTML Text' 
    FROM Search_CTE AS cte 
    JOIN @HTML AS h 
    ON h.id = cte.html_id 
WHERE PATINDEX('%<%',cte.html_text) = 0 --** Filter out rows still containing HTML 
    AND html_text LIKE '%' + @Search + '%'; --** Filter out rows not matching the search criteria 

truy vấn này có giới hạn mà nó không xử lý các tình huống mà> hoặc < là trong văn bản, nhưng điều này có thể được mã hóa xung quanh nếu có yêu cầu.

Các vấn đề liên quan