Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
375,93 KB
Nội dung
Tìm kiếm toàn văn bản XML trong DB2 Holger Seubert, Kỹ sư phần mềm, IBM Sabine Perathoner-Tschaffler, Kỹ sư phần mềm, IBM Tóm tắt: Với sự hỗ trợ của các tài liệu XML lưu trữ tự nhiên, DB2® 9 của IBM® có một bước tiến hóa theo hướng hệ thống cơ sở dữ liệu lai. XQuery, một ngôn ngữ chính mới trong DB2, cho phép làm việc theo cách tối ưu với XML. Tuy nhiên, XML cũng thường chứa các phần văn bản lớn không dễ tìm kiếm được bằng XQuery. Để tìm kiếm có hiệu quả các phần tài liệu không có cấu trúc này, DB2 cung cấp một giải pháp tìm kiếm toàn văn bản. Bài viết này tập trung vào các vấn đề cơ bản về tìm kiếm văn bản của DB2, bao gồm cả việc tạo và quản trị chỉ mục văn bản. Bài viết này cùng tìm hiểu sâu về các tính năng cụ thể của việc tìm kiếm toàn văn bản của DB2, chẳng hạn như tìm kiếm các từ khóa hoặc các cụm từ trong cấu trúc tài liệu XML với tìm kiếm mờ, tìm kiếm gần đúng và tìm gốc của từ. XQuery, tiêu chuẩn W3C để truy cập dữ liệu XML, cung cấp nhiều biểu thức khác nhau để tìm vị trí và truy vấn các tài liệu XML. Hơn nữa bạn có thể sử dụng sức mạnh của ngôn ngữ này để tìm ra các tài liệu XML dựa vào tiêu chuẩn tìm kiếm toàn văn bản được không? Câu trả lời "vẫn chưa có". Hiện nay vẫn không có sự hỗ trợ nào cho các tính năng tìm kiếm toàn văn bản trong XQuery. Lý do của điều này nằm trong Mô hình dữ liệu XQuery (XQuery Data Model), dùng làm cơ sở cho mọi biểu thức XQuery. Để có thể tìm kiếm có hiệu quả dữ liệu toàn văn bản, cần có thông tin về các từ riêng lẻ tạo thành nội dung văn bản của dữ liệu đó và vị trí của chúng. Tuy nhiên, trong Mô hình dữ liệu XQuery, văn bản chỉ đơn giản là một "hộp đen". Mô hình dữ liệu không có khái niệm nào về các từ hoặc các thẻ ở bên trong một nút văn bản; nó chỉ biểu diễn nội dung văn bản của một phần tử hoặc thuộc tính như là một nút kề nhau. Vì vậy, XQuery có thể không cung cấp thứ gì tốt hơn so với việc phối hợp chuỗi ký tự-con. Chức năng này được triển khai thực hiện với hàm contains() có sẵn, hàm này lấy một ngữ cảnh và một thời hạn tìm kiếm làm các tham số. Do DB2 9 hỗ trợ XQuery như là ngôn ngữ chính, nên có thể thực hiện biểu thức XQuery sau đây trong một cửa sổ lệnh của DB2: db2 => XQuery contains("The power of XML", "owe") Như đã đề cập ở trên, hàm contains() triển khai thực hiện phối hợp chuỗi ký tự- con và do đó trả về giá trị true (đúng) cho truy vấn ở trên. Mặc dù người sử dụng tìm kiếm thuật ngữ "owe", kết quả lại là "power" và v.v cũng do hàm contains() trả về, hàm này có thể dẫn đến các kết quả tìm kiếm mà bạn thực sự không muốn tìm kiếm. Vẫn chưa có tiêu chuẩn nào bao gồm chức năng tìm kiếm văn bản trong ngôn ngữ XQuery. Rõ ràng, đây là một nhiệm vụ của Phiên bản 1 của XQuery sau, đã bắt đầu trong một nhóm làm việc riêng biệt: toàn văn bản XQuery 1.0 và XPath 2.0. Trong khi chờ đợi tiêu chuẩn mới này, hiện nay bạn có thể làm gì để tìm ra các tài liệu XML có liên quan dựa vào các từ khoá và cụm từ? Phần dưới đây đưa ra một tổng quan ngắn gọn về chức năng tìm kiếm toàn văn bản của DB2, giúp cho có khả năng tìm kiếm văn bản nhận biết-cấu trúc trên XML. Trình mở rộng tìm kiếm Net của DB2 rút gọn lại Khi nói đến các tài liệu XML tìm kiếm văn bản, hãy xem xét cả hai cấu trúc nội dung và cấu trúc tài liệu thực tế. Một kịch bản điển hình là giới hạn việc tìm kiếm văn bản theo một phần tử cụ thể hoặc cây con của cấu trúc toàn bộ tài liệu XML, giống như: "Hãy tìm tất cả các tài liệu có từ 'XML' và 'database' trong phần tử abstract (trừu tượng), cụm từ 'text search' (tìm kiếm văn bản) và 'Viper Release' ' (Phiên bản Viper) trong phần tử title (tiêu đề) và cả hai từ phải ở trong cùng một câu." Việc tìm kiếm toàn văn bản nhận biết-cấu trúc như vậy trên tài liệu XML trong DB2 được triển khai thực hiện với Trình mở rộng tìm kiếm Net (Net Search Extender - NSE) của DB2, một tính năng được cài đặt riêng rẽ đi kèm với DB2. Việc tìm kiếm văn bản được tích hợp trong SQL và được tối ưu hóa bằng trình tối ưu hóa của DB2 trong thời gian chạy. Các nhiệm vụ quản trị, chẳng hạn như việc tạo và bảo trì chỉ mục, có thể được thực hiện bằng cách sử dụng Trung tâm Kiểm soát DB2. Khi sử dụng SQL, Net Search Extender tìm kiếm dữ liệu văn bản đã được lưu giữ trong cột của một bảng cơ sở dữ liệu. Thay vì tìm kiếm liên tục thông qua dữ liệu văn bản bằng cách sử dụng phối hợp chuỗi ký tự, như đã thực hiện bằng hàm XQuery contains(), Net Search Extender sử dụng một chỉ mục văn bản. Việc sử dụng một chỉ mục văn bản làm cho việc tìm kiếm tài liệu hiệu quả hơn nhiều, do không cần kiểm tra dữ liệu văn bản lúc truy vấn giống như khi thực hiện nó bằng phối hợp chuỗi ký tự-con. Một chỉ mục văn bản thường bao gồm thông tin về các số hạng liên quan được trích xuất từ các tài liệu văn bản. Trong các trường hợp XML, không chỉ các số hạng quan trọng, mà còn cả vị trí của chúng trong cấu trúc tài liệu XML được duy trì trong chỉ mục văn bản. Bây giờ bạn đã quen thuộc với các nguyên tắc cơ bản của Net Search Extender, bạn đã sẵn sàng để tìm hiểu cách sử dụng nó để thực hiện các tìm kiếm toàn văn bản trên dữ liệu XML. Hãy tìm hiểu cách tạo ra một chỉ mục văn bản trong phần tiếp theo. Chuẩn bị để tìm kiếm văn bản Các nhiệm vụ cần được thực hiện để tìm kiếm trong các tài liệu XML trong DB2 có thể được chia thành hai phần: 1. Các nhiệm vụ quản lý chỉ mục. 2. Tìm kiếm toàn văn bản. Phần này đi nhanh qua cả hai kiểu nhiệm vụ bằng cách sử dụng các ví dụ xem xét bảng "product" (sản phẩm) như được định nghĩa trong Liệt kê 1. Lưu ý rằng cột "description" (mô tả) và "comments" (các nhận xét) của bảng "product" là kiểu XML (nói cách khác, các tài liệu XML "description" và "comments" được lưu trữ tự nhiên trong cơ sở dữ liệu). Liệt kê 1. Định nghĩa bảng create table product ( pid varchar(10) primary key not null, description xml, comments xml ); Dữ liệu XML ví dụ được lưu trữ trong các cột "product.description" và "product.comment" được thể hiện tương ứng trong Hình 1 và Hình 2 Các ví dụ truy vấn tiếp theo tìm kiếm các phần tử cụ thể của các tài liệu XML này. Cách chèn các tài liệu XML vào DB2 được trình bày trong bài "Hãy khởi đầu nhanh chóng với DB2 Viper" (developerWorks, 03.2006). Hình 1. Dữ liệu ví dụ của cột "product.description" Hình 2. Dữ liệu ví dụ của cột "product.comments" Trước tiên hãy xem xét những gì cần làm để thực hiện các hoạt động tìm kiếm văn bản trên bảng "product", giống như tìm kiếm tên của một sản phẩm có từ "satisfactory" (vừa ý) trong phần tử "message" (thông báo) của các nhận xét của nó hoặc một sản phẩm có cụm từ "sugar and creamer" (đường và kem) trong phần tử "details" (các chi tiết) của mô tả của nó. Trước khi bạn có thể sử dụng Net Search Extender, bạn phải khởi động các dịch vụ cá thể của nó, như trong Liệt kê 2. Liệt kê 2. Lệnh để khởi động các dịch vụ cá thể của Net Search Extender db2text start Lưu ý rằng lệnh này gọi một lệnh thực hiện riêng có tên là db2text. Như bạn thấy, bất kỳ nhiệm vụ quản trị chỉ mục văn bản nào cũng cần được thực hiện bằng lệnh db2text. Sau khi khởi động, Net Search Extender cho phép các cơ sở dữ liệu DB2 thực hiện các hoạt động tìm kiếm văn bản. Bước này tạo ra các bảng quản trị cần thiết và Các hàm do người dùng định nghĩa khác nhau (UDF) và Các thủ tục đã lưu trữ (STP) cần dùng để tìm kiếm toàn văn bản trên dữ liệu DB2 và được thực hiện chỉ một lần cho mỗi cơ sở dữ liệu. Lệnh cho phép "thử nghiệm" một cơ sở dữ liệu cho các hoạt động tìm kiếm văn bản trông như sau: Liệt kê 3. Lệnh này cho phép "thử nghiệm" cơ sở dữ liệu cho các hoạt động tìm kiếm văn bản db2text enable database for text connect to test Trong trường hợp bạn không thiết lập biến môi trường DB2DBDFT, tất cả các nhiệm vụ quản trị của Net Search Extender đều yêu cầu mệnh đề connect to <dbname>, ở đây <dbname> là tên của cơ sở dữ liệu của bạn. Các lệnh sau đây giả định rằng DB2DBDFT đã được thiết lập. Sau khi cho phép một cơ sở dữ liệu dùng cho văn bản, bạn có thể tạo các chỉ mục văn bản trên các cột đang lưu trữ dữ liệu văn bản theo các định dạng khác nhau, như XML. Lệnh create index thiết lập cơ sở hạ tầng chỉ mục văn bản bằng cách định nghĩa các thuộc tính chỉ mục văn bản, chẳng hạn như tần số cập nhật, định dạng tài liệu, thư mục chỉ mục và v.v Để biết thêm thông tin về các thuộc tính chỉ mục khác nhau, hãy tham khảo tài liệu Net Extender Search. Ví dụ được dùng trong bài viết này sử dụng việc tạo chỉ mục văn bản cơ bản, như trong Liệt kê 4: Liệt kê 4. Việc tạo một chỉ mục văn bản ix1 trên cột "product.description" db2text create index ix1 for text on product(description) Lệnh trong Liệt kê 4 tạo ra một chỉ mục toàn văn bản có tên là "ix1" dựa vào các tài liệu XML được lưu trữ tự nhiên trong cột "description" của bảng "product". Lưu ý rằng sau khi bạn tạo một chỉ mục văn bản, việc tìm kiếm văn bản không tìm thấy bất kỳ kết quả nào, do chỉ mục văn bản không chứa dữ liệu ở điểm này. Dữ liệu của bạn và chỉ mục văn bản cần phải được đồng bộ một cách rõ ràng nếu không có tần số cập nhật nào được quy định. Nhiệm vụ đồng bộ hóa chỉ mục văn bản được gọi là cập nhật chỉ mục và thường làm ngay sau khi bạn đã tạo ra một chỉ mục văn bản. Liệt kê 5. Đồng bộ hóa chỉ mục văn bản với dữ liệu trong bảng cơ sở db2text update index ix1 for text Quá trình cập nhật chỉ mục có thể hoặc được thực hiện bằng thủ công khi sử dụng lệnh trong Liệt kê 5 hoặc được thực hiện tự động theo lịch biểu khi sử dụng một trình tiện ích tầng sau của nền tảng. Có thể quy định cập nhật chỉ mục tự động như một thuộc tính chỉ mục trong quá trình tạo chỉ mục hoặc được quy định sau khi sử dụng một lệnh chỉ mục thay thế. Các bước cần được hoàn thành để chuẩn bị cho các hoạt động tìm kiếm toàn văn bản trong DB2 được tóm tắt dưới đây: Bảng 1. Các bước để chuẩn bị tìm kiếm toàn văn bản trong DB2 Các bước Mô tả Ví dụ Bước 1 Khởi động các dịch vụ cá thể của Net Search Extender. db2text start Bước 2 Cho phép cơ sở dữ liệu của bạn dùng để tìm kiếm toàn văn bản. db2text enable database for text Bước 3 Tạo một chỉ mục toàn văn bản. db2text create index ixName for text on table(column) Bước 4 Cập nhật chỉ mục toàn văn bản được tạo ra trước. db2text update index ixName for text Sau khi hoàn thành bốn bước quản trị, bạn đã sẵn sàng đi tiếp và tìm kiếm toàn văn bản dữ liệu XML. Vậy, các tính năng tìm kiếm thật sự có thể được sử dụng để tìm thông tin liên quan là gì? Tìm thấy những gì bạn đang tìm kiếm Cách phổ biến nhất để thực hiện tìm kiếm toàn văn bản với Net Search Extender là sử dụng hàm tìm kiếm vô hướng SQL CONTAINS() của nó. Sử dụng hàm này ở nơi sử dụng SQL chuẩn và ở nơi bạn có thể dễ dàng kết hợp nó với các điều kiện khác trong một mệnh đề SQL WHERE. Ngoài ra, việc tích hợp chặt chẽ vào trình tối ưu hóa DB2 tạo ra hiệu năng thời gian chạy cao. (Hai phương thức tìm kiếm khác cũng có sẵn cho các tình huống chuyên nghiệp hơn, nhưng bài viết này không thảo luận về chúng). Ví dụ sau đây cho thấy cách sử dụng hàm vô hướng CONTAINS() để ban hành tìm kiếm toàn văn bản: Liệt kê 6. Hàm vô hướng CONTAINS SELECT column FROM table WHERE CONTAINS(column-name, 'search-criteria')=1; Hàm CONTAINS() có hai tham số: tên cột, thiết lập ngữ cảnh trong đó tìm kiếm toàn văn bản sẽ xảy ra và tiêu chuẩn tìm kiếm thực tế sẽ được áp dụng. Các tiêu chuẩn tìm kiếm cơ bản của Net Search Extender có các tính năng sau đây: Các phép toán Boolean để kết nối (AND), phân tách (OR) và loại trừ (NOT) của các từ tìm kiếm. [...]... Cái gì giới hạn việc tìm kiếm văn bản theo các phần tử XML hay các thuộc tính XML cụ thể? Giới hạn tìm kiếm văn bản theo các phần tử hay các thuộc tính XML Việc giới hạn tìm kiếm văn bản theo các phần cụ thể trong cấu trúc tài liệu là một trong những tính năng được sử dụng thường xuyên nhất để tìm kiếm toàn văn bản XML Trong Net Search Extender của DB2, việc giới hạn tìm kiếm văn bản theo các phần tử... Biểu thức tìm kiếm toàn văn bản được thể hiện trong một ngữ cảnh SQL và các tài liệu XML có liên quan được xử lý trong ngữ cảnh XQuery khi sử dụng hàm đầu vào db2- fn:sqlquery() Trong các ví dụ ở trên, việc tìm kiếm văn bản được thực hiện trên toàn bộ cấu trúc tài liệu XML (nói cách khác, trong tất cả các nút văn bản và các giá trị thuộc tính không để ý đến nơi thỏa mãn tiêu chuẩn tìm kiếm trong tài... mạnh về tìm kiếm văn bản Ngoài ra để giới hạn tìm kiếm văn bản theo các phần tử hoặc các thuộc tính cụ thể, Net Search Extender cung cấp một số tính năng khác để định nghĩa tiêu chuẩn tìm kiếm văn bản Ví dụ, bạn có thể giới hạn việc tìm kiếm văn bản theo các từ trùng khớp chỉ khi chúng xảy ra trong cùng một câu (tìm kiếm gần đúng) Những phần sau đây sẽ cung cấp các ví dụ về các tính năng tìm kiếm khác... kết hợp trong ví dụ này: việc tìm kiếm bị giới hạn trong một phần tử cụ thể ("details") và trong nội dung văn bản của phần tử đó (nút văn bản của nó), việc tìm kiếm cũng bị giới hạn theo các từ xuất hiện trong cùng một câu Lưu ý rằng một từ tìm kiếm "sugar and creamer" bao gồm một cụm từ trong đó các từ đơn "sugar", "and" và "creamer" được tìm kiếm theo trình tự chính xác này Mặt khác, việc tìm kiếm các... Liệt kê 8 Sử dụng chức năng tìm kiếm văn bản kết hợp với XMLQUERY() SELECT XMLQUERY('$prod//name' passing description as "prod") FROM product WHERE CONTAINS(description, ' "creamer" ')=1; Truy vấn tìm kiếm toàn văn bản SQL tương tự, như trong Liệt kê 8 ở trên, có thể được thể hiện bằng XQuery như sau: Liệt kê 9 Tìm kiếm văn bản trong ngữ cảnh XQuery XQUERY for $prod in db2- fn:sqlquery("SELECT description... Net Search Extender cung cấp tìm kiếm dựa theo phần bằng cách: giới hạn tìm kiếm theo các phần tử XML giới hạn tìm kiếm theo các thuộc tính XML hỗ trợ kiểu nội dung hỗn hợp của các phần tử XML Bây giờ bạn đã thấy Net Search Extender cung cấp những ý tưởng cơ bản của các tính năng tìm kiếm, chúng ta hãy tìm hiểu cách sử dụng thực tế của chúng bằng ví dụ Tìm kiếm văn bản bằng cách sử dụng SQL và... cách tìm kiếm không chỉ với một từ tìm kiếm cụ thể, mà còn với các từ có liên quan đến nó theo các quan hệ do người dùng định nghĩa Tìm kiếm các dãy số, có thể hoặc trong các tài liệu có cấu trúc hoặc trong các cột bổ sung Tìm gốc từ để rút gọn từ tìm kiếm đến từ gốc của nó trước khi thực hiện tìm kiếm (chỉ cho tiếng Anh) Để thực hiện tìm kiếm đích bên trong cấu trúc tài liệu của các tài liệu XML, ... Node (nút văn bản) trực hệ của phần tử "entity" (thực thể) và phạm vi để tìm kiếm văn bản là phần tử XML "sentence", truy vấn trả về một yêu cầu nhấn chuột Cho đến nay, sức mạnh của các chỉ mục toàn văn bản hoàn toàn chưa được khai thác Đã thấy các ví dụ về cách giới hạn tìm kiếm theo các phần cụ thể trong cấu trúc tài liệu, Net Search Extender cung cấp nhiều cách thể hiện tiêu chuẩn tìm kiếm Khai... ')=1; Việc tìm kiếm qua các ranh giới phần tử Đôi khi bạn bắt gặp các phần tử XML có một kiểu nội dung hỗn hợp chứa dữ liệu văn bản và các phần tử XML khác Ví dụ, phần tử XML "sentence" sau đây chứa một số phần tử văn bản và phần tử "entity" (thực thể) khác: Hình 3 Phần tử XML của một kiểu nội dung hỗn hợp Trong trường hợp này, bạn muốn tìm kiếm qua các ranh giới phần tử (nói cách khác, việc tìm kiếm cụm... 'SECTION("/product/description") "pattern" & "creamer" & NOT "sugar" ')=1; Tìm kiếm mờ Một tính năng phổ biến khác là tìm kiếm mờ (fuzzy) Tìm kiếm mờ tìm ra các tài liệu chứa từ tìm kiếm được viết theo cách tương tự đúng chính tả với từ tìm kiếm được đưa ra Theo cách ấy, ba ký tự đầu tiên cần ăn khớp Nó thường được dùng khi có viết sai chính tả trong tài liệu Liệt kê 19 Tìm kiếm mờ để tìm các từ được viết tương tự theo đúng chính . việc tìm kiếm văn bản theo các phần tử XML hay các thuộc tính XML cụ thể? Giới hạn tìm kiếm văn bản theo các phần tử hay các thuộc tính XML Việc giới hạn tìm kiếm văn bản theo các phần cụ thể trong. toàn văn bản trên dữ liệu XML. Hãy tìm hiểu cách tạo ra một chỉ mục văn bản trong phần tiếp theo. Chuẩn bị để tìm kiếm văn bản Các nhiệm vụ cần được thực hiện để tìm kiếm trong các tài liệu XML. hoàn thành để chuẩn bị cho các hoạt động tìm kiếm toàn văn bản trong DB2 được tóm tắt dưới đây: Bảng 1. Các bước để chuẩn bị tìm kiếm toàn văn bản trong DB2 Các bước Mô tả Ví dụ Bước 1 Khởi