Tìm kiếm văn bản của DB2, Phần 1: Tìm kiếm toàn văn bản

Tìm kiếm văn bản của DB2 (DB2 Text Search) cho phép một người dùng cơ sở dữ liệu IBM DB2 cho Linux, UNIX và Windows tạo ra các ứng dụng có các khả năng tìm kiếm toàn văn bản bằng cách nhúng các mệnh đề tìm kiếm toàn văn bản vào các câu lệnh SQL và XQuery. Trong hướng dẫn này, bạn sẽ thiết lập một cơ sở dữ liệu để hỗ trợ tìm kiếm văn bản và đi qua một kịch bản để nhận được một số kinh nghiệm về thiết lập các tìm kiếm văn bản riêng của mình.

Lưu ý: Hướng dẫn này đã được cập nhật với các ví dụ và các lệnh mã có sẵn tốt hơn để giúp cho người dùng không quen với DB2 tránh khỏi các vấn đề ngẫu nhiên.

Prashant Shettar, Kỹ sư phần mềm, IBM

Prashant Shettar là một kỹ sư phần mềm Các hệ thống trong tập đoàn Quản lý Thông tin của IBM (một bộ phận của Tập đoàn phần mềm IBM) tại Bangalore, Ấn Độ.



Marion Behnen, Nhà phát triển tìm kiếm văn bản của DB2, IBM

Marion Behnen là một kỹ sư phần mềm cao cấp trong Tập đoàn phần mềm IBM và là một nhà lãnh đạo kỹ thuật về tìm kiếm toàn văn bản trong DB2. Bà đã có hơn 20 năm kinh nghiệm trong việc phát triển ứng dụng cơ sở dữ liệu, báo cáo kinh doanh, lưu trữ dữ liệu và tích hợp quá trình kinh doanh. Trước khi gia nhập IBM, bà đã dành tâm trí cho nhiều khía cạnh của quá trình kinh doanh và tích hợp dữ liệu, đặc biệt là với ngành công nghiệp sản xuất.


Cấp độ đóng góp cho developerWorks của
        tác giả

Shantanu Mundkur, Nhà phát triển tìm kiếm văn bản của DB2, IBM

Shantanu Mundkur là một kỹ sư phần mềm tư vấn tại Phòng thí nghiệm Thung lũng Silicon của IBM. Ông thuộc nhóm phát triển DB2 cho Linux, UNIX và Windows của IBM và làm việc trong trong lĩnh vực tìm kiếm toàn văn bản. Ông có rất nhiều kinh nghiệm phát triển sản phẩm phần mềm và đã thiết kế và thực hiện các tính năng cho nhiều máy chủ cơ sở dữ liệu khác nhau gồm cả DB2 và Informix.



15 04 2010 (Xuất bản lần đầu tiên vào ngày 03 08 2012)

Trước khi bạn bắt đầu

Hãy tìm hiểu những điều cần mong đợi từ hướng dẫn này và cách nhận được nhiều kiến thức nhất trong bài này.

Về hướng dẫn này

Tìm kiếm văn bản của DB2 là một thành phần tích hợp của DB2 9.5 và do máy chủ IBM OmniFind™ Text Search (Tìm kiếm văn bản OmniFind của IBM) cung cấp. Nó cung cấp các tính năng sau đây:

  • Tìm kiếm toàn văn bản trong các tài liệu văn bản, HTML và XML, gồm cả tìm kiếm theo logic Bun (Boolean) và ký tự đại diện.
  • Hỗ trợ SQL, SQL/XML và Xquery tích hợp đầy đủ, gồm cả tập con cú pháp XPath để tìm kiếm các tài liệu XML.
  • Xử lý ngôn ngữ với định nghĩa các từ đồng nghĩa tùy chọn.
  • Cập nhật chỉ mục không đồng bộ với tùy chọn lập lịch biểu.

Hướng dẫn này trình bày cách sử dụng các tính năng cơ bản trong Tìm kiếm văn bản của DB2 để tìm kiếm trong các tài liệu văn bản thuần và các tài liệu XML được lưu trữ trong cơ sở dữ liệu và hướng dẫn bạn qua các nhiệm vụ sau đây:

  • Chuẩn bị thiết lập cơ sở dữ liệu.
  • Tạo các chỉ mục tìm kiếm-văn bản cho các tài liệu dữ liệu văn bản và các tài liệu XML.
  • Điền các chỉ mục tìm kiếm-văn bản.
  • Tìm kiếm trong văn bản thuần.
  • Xác định mối liên quan trong các kết quả.
  • Tìm kiếm trong các tài liệu XML.
  • Cập nhật các chỉ mục tìm kiếm-văn bản.
  • Kết thúc công việc.

Các yêu cầu và các điều kiện tiên quyết về hệ thống

Để hoàn thành các bước sau, ít nhất là bạn phải có bản vá lỗi 1 (Fix Pack 1), phiên bản DB2 9.5 cho Linux, UNIX và Windows đã cài đặt trên hệ thống. Lưu ý rằng bạn không thể sử dụng Tìm kiếm văn bản của DB2 trong một môi trường cơ sở dữ liệu phân vùng trên một cá thể DB2 có nhiều phân vùng.

Để đi qua hết hướng dẫn này khi sử dụng cách tiếp cận theo từng bước một, có thể thực hiện các lệnh như các lệnh tương tác CLP (Bộ xử lý dòng lệnh) của DB2 khi sử dụng lệnh db2 -t. Các lệnh quản trị chỉ mục tìm kiếm văn bản db2ts phải được chạy tại dấu nhắc của hệ điều hành. Tuy nhiên, các lệnh này có thể được thực hiện trong cùng một cửa sổ bằng cách sử dụng lệnh shell (!). Trong chế độ này, mọi câu lệnh cũng sẽ phải sử dụng ký tự kết thúc câu lệnh — là một dấu chấm phẩy (;).

Để chạy các ví dụ trong bài này, hãy chắc chắn rằng bạn có quyền hạn DBADM trên máy chủ cơ sở dữ liệu DB2 mà bạn muốn sử dụng. Nếu bạn tạo ra cơ sở dữ liệu như được mô tả trong phần tiếp theo, quyền hạn này được gán tự động. Quyền hạn DBADM là cần thiết để quản lý các dịch vụ cá thể tìm kiếm-văn bản và để tạo và sửa đổi cơ sở dữ liệu được sử dụng trong các ví dụ.


Thiết lập một cơ sở dữ liệu tìm kiếm văn bản

Các bước thiết lập một cơ sở dữ liệu thử nghiệm

  1. Quy định cơ sở dữ liệu mặc định. Tìm kiếm văn bản của DB2 cung cấp tùy chọn để thiết lập một biến môi trường quy định cơ sở dữ liệu nên được sử dụng cho các lệnh quản trị chỉ mục tìm kiếm-văn bản. Nếu các quyền hạn cần thiết của người dùng có sẵn để sử dụng, bạn có thể ban hành lệnh db2ts mà không cần chỉ rõ một mệnh đề connection (kết nối). Có thể thiết lập biến môi trường như sau:
    Liệt kê 1. Thiết lập DB2DBDFT để xác định cơ sở dữ liệu mặc định
    Linux/UNIX (ksh):
        export DB2DBDFT=mytstest
    Windows:
        SET DB2DBDFT=mytstest
  2. Tạo một cơ sở dữ liệu. Trong bước này, tạo ra một cơ sở dữ liệu, thích hợp để lưu trữ các tài liệu XML. Hãy ban hành lệnh sau tại dấu nhắc lệnh CLP của DB2:
    Liệt kê 2. Lệnh để tạo cơ sở dữ liệu
    CREATE DATABASE mytstest USING CODESET UTF-8 TERRITORY US
  3. Khởi động các dịch vụ cá thể tìm kiếm-văn bản. Để khởi động các dịch vụ cá thể tìm kiếm-văn bản, hãy sử dụng lệnh sau:
    Liệt kê 3. Lệnh để khởi động các dịch vụ cá thể tìm kiếm-văn bản
    db2ts "START FOR TEXT"

    Trên các hệ điều hành Linux và UNIX, lệnh này khởi động một trình tiện ích (daemon). Trình tiện ích này điều khiển lập lịch biểu các cập nhật chỉ mục tìm kiếm-văn bản trên máy chủ cơ sở dữ liệu DB2. Máy chủ tìm kiếm văn bản cũng được khởi động và chạy như một quá trình độc lập. Hãy khởi động trình tiện ích (daemon) và máy chủ tìm kiếm văn bản dưới tên ủy quyền của chủ sở hữu cá thể DB2.

    Trên các hệ điều hành Windows, lệnh này khởi động dịch vụ DB2TS. Dịch vụ DB2TS khởi động máy chủ tìm kiếm văn bản và từ đó điều khiển lập lịch biểu các cập nhật chỉ mục tìm kiếm-văn bản. Người dùng đang chạy lệnh này phải đáp ứng các yêu cầu của Windows về khởi động một dịch vụ.

  4. Kích hoạt cơ sở dữ liệu để tìm kiếm văn bản. Tìm kiếm văn bản của DB2 quản lý thông tin về các chỉ mục tìm kiếm-văn bản để hỗ trợ các nhiệm vụ quản trị như các cập nhật chỉ mục hoặc tình trạng thu thập dữ liệu. Việc kích hoạt cơ sở dữ liệu sẽ tạo ra các bảng và các khung nhìn hệ thống có chứa thông tin này.
    Liệt kê 4. Lệnh để chạy cơ sở dữ liệu cho việc tìm kiếm văn bản
    db2ts "ENABLE DATABASE FOR TEXT"

    Lưu ý rằng nếu DB2DBDFT chưa được thiết lập, các lệnh kích hoạt cần kèm theo thông tin kết nối, như hiển thị trong ví dụ sau đây:

    Liệt kê 5. Lệnh để kích hoạt cơ sở dữ liệu cho văn bản có thông tin kết nối cụ thể
    db2ts "ENABLE DATABASE FOR TEXT CONNECT TO mytstest USER db2admin USING mypswd"
  5. Kết nối tới cơ sở dữ liệu mytstest:
    Liệt kê 6. Kết nối tới cơ sở dữ liệu mytstest
    CONNECT TO mytstest
  6. Tạo và điền vào một bảng:
    Liệt kê 7. Bảng books
    CREATE TABLE books ( isbn VARCHAR(18) NOT NULL PRIMARY KEY,
                         author VARCHAR(30), 
                         title VARCHAR(128), 
                         year INTEGER, 
                         bookinfo XML)

    Lưu ý rằng để kích hoạt việc tạo các chỉ mục tìm kiếm-văn bản và chạy các truy vấn tìm kiếm-văn bản, cần phải quy định một khóa chính cho bảng dữ liệu.

  7. Chèn dữ liệu sau đây vào bảng books:
    Liệt kê 8. Chèn dữ liệu vào bảng books
    INSERT INTO books VALUES
        ('123-014014014', 'Joe Climber', 'Climber''s Mountain Tops', 1995,
         XMLPARSE(DOCUMENT
             '<bookinfo>  
              <author>Joe Climber</author> 
              <title>Climber''s Mountain Tops</title>
              <story>This vivid description of Joe Climber''s experiences 
                  when tackling the mountains of his native Mountainland lets you 
                  hold your breath when you follow Joe on his adventures in the 
                  regions where the air is thin and the weather is treacherous. 
                  Includes beautiful color photos of Mountainland''s mountain 
                  ranges.
              </story> 
              <year>1995</year> 
              <price>16.00</price>
              <pages>176</pages>
              </bookinfo>'))
    
    INSERT INTO books VALUES
        ('678-014014078', 'Joe Smith', 'The Range', 1991, 
         XMLPARSE(DOCUMENT
             '<bookinfo> 
              <author>Joe Smith</author>
              <title>The Range</title>
              <story>All you need to know about kitchen ranges. A pictured 
                  description based on the most recent ergonomics studies for 
                  everybody who is involved in food preparation in the home.
              </story> 
              <year>1991</year> 
              <price>6.00</price>
              <pages>76</pages>
              </bookinfo>'))
    
    INSERT INTO books VALUES
        ('111-223334444', 'Sam Climber', 'Top of the Mountain: Mountain Lore', 1966,
         XMLPARSE(DOCUMENT
             '<bookinfo> 
              <author>Sam Climber</author>
              <title>Top of the Mountain: Mountain Lore</title>
              <story>Sam Climber has traveled through the world to gather 
                  stories about mountains. This compendium includes the best 
                  stories and is beautifully illustrated.
              </story>
              <year>1966</year>
              <price>20.00</price>
              <pages>449</pages>
              </bookinfo>'))
     
     INSERT INTO books VALUES
         ('777-010101010', 'Samantha Smitt', 'The Database Compendium', 2001,
          XMLPARSE(DOCUMENT
              '<bookinfo> 
               <author>Samantha Smitt</author> 
               <title>The Database Compendium</title>
               <story>Follow Samantha into the world of database management. 
                   Covers a wide range of the most popular database architectures.
               </story> 
               <year>2001</year> 
               <price>19.00</price>
               <pages>222</pages>
               </bookinfo>'))
    
      INSERT INTO books VALUES
          ('123-918273645', 'Joanne Miller', 'The Travel Companion', 2005, 
           XMLPARSE(DOCUMENT
               '<bookinfo> 
                <author>Joanne Miller</author> 
                <title>The Travel Companion </title>
                <story>If you like to travel, this is the book for you. 
                    Joanne Miller has compiled her funny and often surprising diary 
                    entries about places and people which were previously published 
                    as travel log in ''Here and There''
                </story> 
                <year>2005</year>
                <price>31.00</price>
                <pages>321</pages>
                </bookinfo>'))

Tạo các chỉ mục tìm kiếm-văn bản

Sau khi đã kích hoạt cơ sở dữ liệu để tìm kiếm văn bản, bạn có thể tạo ra các chỉ mục tìm kiếm-văn bản theo các kiểu dữ liệu văn bản và các kiểu dữ liệu XML. Với mỗi chỉ mục tìm kiếm-văn bản, một bộ sưu tập tìm kiếm-văn bản được tạo ra trên hệ thống tệp có lưu giữ các từ quan trọng được trích ra từ các tài liệu đó.

Tìm kiếm văn bản của DB2 hỗ trợ các định dạng tài liệu sau:

  • Text (Văn bản): Định dạng tài liệu văn bản thuần.
  • HTML: Ngôn ngữ đánh dấu siêu văn bản.
  • XML: Ngôn ngữ đánh dấu mở rộng.

Để tạo một chỉ mục tìm kiếm-văn bản thuần trên cột "title", hãy chạy lệnh sau:

Liệt kê 9. Lệnh để tạo ra một chỉ mục tìm kiếm văn bản trên cột 'title'
db2ts "CREATE INDEX myschema.mytitleidx FOR TEXT ON books(title)"

Để tạo ra một chỉ mục trên cột tài liệu XML "bookinfo", hãy chạy lệnh sau:

Liệt kê 10. Lệnh để tạo ra một chỉ mục tìm kiếm văn bản trên cột 'bookinfo'
db2ts "CREATE INDEX myschema.myxmlidx FOR TEXT ON books(bookinfo)"

Lưu ý rằng một chỉ mục tìm kiếm-văn bản, được tạo ra trên một cột kiểu dữ liệu XML, được tạo tự động khi sử dụng định dạng tài liệu "XML" cho phép sử dụng cú pháp XQuery/XPath trong các truy vấn tìm kiếm của bạn. Đối với các kiểu dữ liệu khác, định dạng mặc định là "TEXT."

Sau khi hoàn thành lệnh này, bạn tìm thấy một chỉ mục rỗng, các trigger chèn, cập nhật và xóa mới trên cột dữ liệu để ghi lại các thay đổi dữ liệu và các bảng danh mục hệ thống bổ sung để quản lý chỉ mục tìm kiếm-văn bản mới.

Để xem các đặc tính chỉ mục này, hãy sử dụng các khung nhìn thông tin do Tìm kiếm văn bản của DB2 cung cấp:

Liệt kê 11. Truy vấn các khung nhìn thông tin
SELECT * FROM sysibmts.tscollectionnames
SELECT * FROM sysibmts.tsindexes

Lưu ý rằng một khung nhìn sự kiện (event) và một khung nhìn trung gian (staging) đã được tạo ra cho chỉ mục tìm kiếm văn bản mới. Khung nhìn sự kiện lưu giữ các thông báo lỗi và thông tin về các hoạt động quản trị chỉ mục, trong khi khung nhìn trung gian biểu diễn bản ghi nhật ký thay đổi cho các bản cập nhật dữ liệu, được sử dụng để đồng bộ hóa nội dung của bảng dữ liệu với nội dung của chỉ mục tìm kiếm-văn bản.

Điền các chỉ mục tìm kiếm-văn bản

Sau khi tạo chỉ mục tìm kiếm-văn bản, một cấu trúc chỉ mục rỗng đã được chuẩn bị. Việc cập nhật chỉ mục tìm kiếm-văn bản trong lần đầu (cập nhật ban đầu) sẽ tải và tạo chỉ mục dữ liệu từ cột có chỉ mục tìm kiếm văn bản được tạo ra. Tìm kiếm văn bản DB2 sử dụng việc xử lý ngôn ngữ để phân tích cú pháp các văn bản và các tài liệu.

Để điền các chỉ mục tìm kiếm-văn bản, hãy sử dụng các lệnh sau:

Liệt kê 12. Lệnh để điền các chỉ mục tìm kiếm-văn bản
db2ts "UPDATE INDEX myschema.mytitleidx FOR TEXT" 
db2ts "UPDATE INDEX myschema.myxmlidx FOR TEXT"

Sau khi đã thực hiện thành công các lệnh, chỉ mục tìm kiếm-văn bản được đánh dấu sao cho mỗi lệnh cập nhật tiếp theo được thực hiện như là một sự cập nhật gia tăng có sử dụng bản ghi nhật ký thay đổi đã ghi trong khung nhìn trung gian. Các sự cập nhật gia tăng được áp dụng không đồng bộ, có nghĩa là, chỉ khi một lệnh UPDATE INDEX được ban hành, chỉ mục tìm kiếm văn bản mới được đồng bộ với các hàng của bảng cơ sở. Việc cập nhật có thể được khởi động thủ công, như được hiển thị ở đây, hoặc được điều khiển qua cơ chế lập lịch biểu. Để biết các thông tin chi tiết về các tùy chọn lập lịch biểu, hãy xem Hướng dẫn sử dụng Tìm kiếm văn bản DB2.


Tìm kiếm với Tìm kiếm văn bản DB2

Các hàm tìm kiếm DB2 dựng sẵn dưới đây có sẵn để tìm kiếm toàn văn bản trong DB2:

  • Truy vấn với một từ hoặc cụm từ có hàm CONTAINS() hoặc xmlcolumn-contains()
  • Nhận được mối liên quan trong một tài liệu bằng hàm SCORE()

Từ hoặc các cụm từ có thể được kết hợp với các toán tử Bun (AND, OR, NOT) và được đánh dấu bằng các ký tự đại diện (?, *) để hạn chế hoặc mở rộng phạm vi tìm kiếm.

Tìm kiếm trong văn bản thuần

Sử dụng từ khóa CONTAINS để gửi đi một truy vấn tìm kiếm:

Liệt kê 13. Cú pháp cơ bản để tìm kiếm văn bản
SELECT author, year, SUBSTR(title,1,30)  
FROM books 
WHERE CONTAINS(title, 'mountain') = 1



AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops
Sam Climber                           1966 Top of the Mountain: Mountain

  2 record(s) selected.

Hàm CONTAINS tìm kiếm chỉ mục tìm kiếm-văn bản theo các đối số tìm kiếm đã quy định và trả về kết quả có hay không tìm thấy một sự trùng khớp. Nếu tài liệu có một sự trùng khớp với đối số tìm kiếm, kết quả là 1, nếu không kết quả là 0.

Tìm kiếm văn bản DB2 tự động sử dụng các dạng mẫu có nguồn gốc trong tìm kiếm. Trong ví dụ trên, việc tìm kiếm sẽ trả về không chỉ các lần xuất hiện của từ "mountain" (núi) mà còn của từ "mountains" (nhiều núi) và các từ khác bắt nguồn từ đó.

Để tìm các hàng có chứa một tổ hợp các từ, hãy sử dụng toán tử AND, OR và NOT để bao gồm hoặc loại trừ các tài liệu, lấy toán tử AND làm mặc định để kết hợp nhiều từ. Truy vấn sau đây trả về các hàng có chứa cả hai từ "mountain" và "top" (ngọn) trong tiêu đề cột, dù mỗi từ xuất hiện bất kỳ ở đâu trong cột đó.

Liệt kê 14. Sử dụng toán tử Bun mặc định AND trong hàm tìm kiếm-văn bản
SELECT author, year, SUBSTR(title,1,30)
FROM books
WHERE CONTAINS(title, 'mountain top') = 1 
 
 
AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops
Sam Climber                           1966 Top of the Mountain: Mountain

  2 record(s) selected.

Lưu ý rằng việc nhúng các từ này trong các dấu nháy kép sẽ tìm kiếm cụm từ chính xác là "mountain tops" (các ngọn núi):

Liệt kê 15. Tìm một sự trùng khớp chính xác bằng cách sử dụng các dấu nháy kép với đối số tìm kiếm
SELECT author, year, SUBSTR(title,1,30)
FROM books
WHERE CONTAINS(title, '"mountain tops"') = 1
   
   
AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops

  1 record(s) selected.

Các ký tự đại diện ? (cho một ký tự) và * (cho nhiều ký tự) trả về các tài liệu trùng khớp với từ một phần:

Liệt kê 16. Tìm kiếm khi sử dụng các ký tự đại diện
SELECT author, year, SUBSTR(title,1,30)
FROM books
WHERE CONTAINS(title, 'comp*') = 1


AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Samantha Smitt                        2001 The Database Compendium
Joanne Miller                         2005 The Travel Companion

  2 record(s) selected.

Cần tránh sử dụng một ký tự đại diện ở đầu một từ tìm kiếm, vì nó có một ảnh hưởng không tốt đáng kể đến hiệu năng truy vấn.

Nếu bạn muốn lấy ra một ví dụ mẫu của các kết quả, bạn có thể hạn chế số lượng các tài liệu bằng đối số RESULTLIMIT:

Liệt kê 17. Hạn chế số lượng các tài liệu bằng đối số RESULTLIMIT
SELECT author, year, SUBSTR(title,1,30)
FROM books
WHERE CONTAINS(title, 'mountain', 'RESULTLIMIT=1') = 1 


AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Joe Climber                           1995 Climber's Mountain Tops

  1 record(s) selected.

Lấy ra các kết quả dựa trên mối liên quan của chúng

Sử dụng hàm SCORE để xác định một kết quả trùng khớp đến mức nào với (các) từ tìm kiếm được so sánh với các kết quả khác cho truy vấn đó.

Liệt kê 18. Nhận được mối liên quan trong các tài liệu khi sử dụng hàm SCORE
SELECT title
FROM books
WHERE CONTAINS(title, 'mountain') = 1
ORDER BY SCORE(title, 'mountain') DESC
 
 
TITLE
-------------------------------------------------------------------
Top of the Mountain: Mountain Lore
Climber's Mountain Tops

  2 record(s) selected.

Điểm số cho một tài liệu được thể hiện bằng một giá trị giữa 0 và 1 và tính đến số lượng các lần xuất hiện của (các) từ tìm kiếm trong một tài liệu so với các tài liệu khác trong tập kết quả, có nghĩa là, nó được tính toán tự động cho tập kết quả hiện tại.

Tìm kiếm các tài liệu XML

Bạn có thể sử dụng một số các tùy chọn khác nhau để tìm kiếm trong các tài liệu XML:

  • Tìm kiếm bằng SQL/XML:
    Liệt kê 19. Sử dụng chức năng tìm kiếm-văn bản trong tổ hợp có hàm XMLQUERY()
    SELECT 
    xmlquery('$bi//author' passing bookinfo as "bi")  
    FROM books WHERE CONTAINS(bookinfo, 'range') = 1 
     
     
    1
    -------------------------------------------------------------------
    <author>Joe Climber</author>
    <author>Joe Smith</author>
    <author>Samantha Smitt</author>
      3 record(s) selected.
  • Tìm kiếm bằng XQuery
    Liệt kê 20. Tìm kiếm văn bản trong bối cảnh Xquery
    xquery db2-fn:xmlcolumn-contains('BOOKS.BOOKINFO', 'range')/bookinfo/author
     
    
     1
     -------------------------------------------------------------------
    <author>Joe Climber</author>
    <author>Joe Smith</author>
    <author>Samantha Smitt</author>
      3 record(s) selected.
  • Tìm kiếm bằng các mệnh đề Xpath
    Liệt kê 21. Tìm kiếm bằng biểu thức Xpath
    Example: 1
    SELECT author, year, SUBSTR(title,1,30)
    FROM books 
    WHERE CONTAINS(bookinfo,
                   '@xpath:''/bookinfo/story [. contains("range")]''') = 1 
    
    
    
    AUTHOR                         YEAR        3
    ------------------------------ ----------- ------------------------------
    Joe Climber                           1995 Climber's Mountain Tops
    Joe Smith                             1991 The Range
    Samantha Smitt                        2001 The Database Compendium
    
      3 record(s) selected.    
    
    Example: 2
    xquery 
    db2-fn:xmlcolumn-contains(
        'BOOKS.BOOKINFO',
        '@xpath:''/bookinfo/story[. contains("range")]''')/bookinfo/author
    
    
    <author>Joe Climber</author>
    <author>Joe Smith</author>
    <author>Samantha Smitt</author>
    
      3 record(s) selected

Cập nhật các chỉ mục tìm kiếm-văn bản

Các thay đổi với cột dữ liệu (chèn, cập nhật, xóa một hàng) được theo dõi trong khung nhìn trung gian và được áp dụng cho chỉ mục tìm kiếm văn bản có một cập nhật chỉ mục gia tăng.

Liệt kê 22. Chèn một hàng khác vào bảng 'books'
INSERT INTO books VALUES
    ('456-456456456', 'John Doe', 'The Database Book', 2005, 
     XMLPARSE(DOCUMENT
         '<bookinfo> 
          <author>John Doe</author> 
          <title>The Database Book</title>
          <story>The ultimate book about contemporary databases.
          </story>
          <year>2005</year>
          <price>55.00</price>
          <pages>176</pages>
          </bookinfo>'))

Để đồng bộ hóa chỉ mục tìm kiếm-văn bản với cột dữ liệu, hãy cập nhật các chỉ mục như sau:

Liệt kê 23. Điền các chỉ mục tìm kiếm văn bản
db2ts "UPDATE INDEX myschema.mytitleidx FOR TEXT"
db2ts "UPDATE INDEX myschema.myxmlidx FOR TEXT"

Trong trường hợp có cảnh báo hoặc có lỗi, hãy xem xét khung nhìn sự kiện với chỉ mục tìm kiếm văn bản:

Liệt kê 24. Xem lại khung nhìn sự kiện với chỉ mục tìm kiếm văn bản
SELECT * FROM <eventviewschema>.<eventviewname>

với các giá trị <eventviewschema> và <eventviewname> khi được liệt kê bởi db2 "SELECT eventviewschema, eventviewname FROM sysibmts.tsindexes".

Sau khi thực hiện cập nhật chỉ mục thành công, dữ liệu mới có sẵn trong chỉ mục tìm kiếm văn bản và có thể được tìm kiếm:

Liệt kê 25. Tìm kiếm văn bản bằng biểu thức Xpath
SELECT author, year, SUBSTR(title,1,30)
FROM books
WHERE CONTAINS(bookinfo,
               '@xpath:''/bookinfo/story [. contains("database")]''') = 1 



AUTHOR                         YEAR        3
------------------------------ ----------- ------------------------------
Samantha Smitt                        2001 The Database Compendium
John Doe                              2005 The Database Book

  2 record(s) selected.

Kết thúc công việc

Việc xóa một bảng hoặc một cơ sở dữ liệu không tự động xóa các bộ sưu tập tìm kiếm văn bản. Trước khi xóa một bảng hoặc cơ sở dữ liệu, hãy sử dụng các bước sau để đảm bảo tất cả các tạo phẩm đều được loại bỏ:

Liệt kê 26. Lệnh để xóa các chỉ mục tìm kiếm-văn bản
db2ts "DROP INDEX myschema.mytitleidx FOR TEXT"
db2ts "DROP INDEX myschema.myxmlidx FOR TEXT"

Việc vô hiệu hóa cơ sở dữ liệu cho tìm kiếm-văn bản sẽ xóa các bảng và các khung nhìn hệ thống duy trì siêu dữ liệu tìm kiếm-văn bản:

Liệt kê 27. Lệnh để vô hiệu hóa cơ sở dữ liệu tìm kiếm văn bản
db2ts "DISABLE DATABASE FOR TEXT"

Lệnh disable (vô hiệu hóa) sẽ không có hiệu lực nếu chỉ mục tìm kiếm-văn bản vẫn còn tồn tại trong cơ sở dữ liệu. Bạn có thể làm cho lệnh này có hiệu lực bằng cách sử dụng tùy chọn bắt buộc disable database for text force (vô hiệu hóa cơ sở dữ liệu đối với bắt buộc văn bản), nhưng người ta khuyến cáo hãy loại bỏ các chỉ mục tìm kiếm văn bản bằng lệnh drop index for text (xóa chỉ mục với văn bản).

Dừng các dịch vụ cá thể tìm kiếm-văn bản để dừng các quá trình đã được khởi động để hỗ trợ tìm kiếm toàn văn bản:

Liệt kê 28. Lệnh để dừng các dịch vụ tìm kiếm-văn bản
db2ts "STOP FOR TEXT"

Cuối cùng, bạn có thể bỏ đi cơ sở dữ liệu thử nghiệm để hoàn thành hướng dẫn này:

Liệt kê 29. Ngắt kết nối khỏi và xóa cơ sở dữ liệu thử nghiệm
 DISCONNECT CURRENT
 DROP DATABASE mytstest

Kết luận

Hướng dẫn này đã dẫn bạn qua việc thiết lập môi trường Tìm kiếm văn bản của DB2, chuẩn bị và cập nhật các chỉ mục tìm kiếm-văn bản và sử dụng các hàm CONTAINSSCORE. Để tìm hiểu thêm về các khả năng Tìm kiếm văn bản của DB2, hãy tham khảo Hướng dẫn cho người dùng Tìm kiếm văn bản của DB2.

Lời cảm ơn

Các tác giả xin cảm ơn của Roland Seuchter về sự giúp đỡ của ông trong việc phát triển hướng dẫn này.


Tải về

Mô tảTênKích thước
Sample scripts for this tutorialsamplescripts.zip8KB

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

  • Tải phiên bản dùng thử miễn phí của DB2 10 cho Linux, UNIX và Windows.
  • Bây giờ bạn có thể sử dụng DB2 miễn phí. Hãy tải về DB2 Express-C, một phiên bản miễn phí của DB2 Express Edition cho cộng đồng có cung cấp các tính năng dữ liệu cốt lõi giống như DB2 Express Edition và cung cấp một cơ sở vững chắc để xây dựng và triển khai các ứng dụng.
  • Tải về các phiên bản đánh giá sản phẩm của IBM và nhận được các công cụ phát triển ứng dụng thực hành của bạn và các sản phẩm phần mềm trung gian từ Quản lý thông tin của IBM, Lotus®, Rational®, Tivoli® và WebSphere®.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Khi bạn đăng ký với trang developerWorks lần đầu tiên, một tiểu sử của của bạn được tạo ra. Chọn các thông tin về tiểu sử của bạn (tên, nước/vùng, và nơi làm việc) đã được hiện lên màn hình, thông tin này sẽ được hiện kèm với nội dung mà bạn đăng tải. Bạn có thể cập nhật thông tin này bất kỳ lúc nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Information Management
ArticleID=828776
ArticleTitle=Tìm kiếm văn bản của DB2, Phần 1: Tìm kiếm toàn văn bản
publish-date=04152010