Tìm kiếm văn bản của DB2, Phần 2: Tìm hiểu về xử lý ngôn ngữ để tìm kiếm toàn văn bản trong DB2

Khi nào có một tài liệu trong một kết quả tìm kiếm?

Tìm kiếm văn bản của DB2 (DB2 Text Search) cho phép tìm kiếm toàn văn bản trên dữ liệu có cấu trúc và không có cấu trúc được lưu trữ trong một cơ sở dữ liệu DB2®. Nó dùng xử lý ngôn ngữ để xác định tập kết quả của một truy vấn tìm kiếm toàn văn bản. Bài này cung cấp một tổng quan về quá trình phân tích tài liệu và xử lý các đặc tính ngôn ngữ khác nhau cho các cập nhật chỉ mục văn bản, cũng như giới thiệu một số điều phức tạp về cú pháp và ngữ nghĩa học truy vấn và ảnh hưởng của chúng đến các kết quả thực hiện truy vấ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.



02 08 2012

Giới thiệu

Tìm kiếm văn bản của DB2 cho phép tìm kiếm toàn văn bản trên dữ liệu có cấu trúc và không có cấu trúc được lưu trữ trong một cơ sở dữ liệu DB2. Nó dùng xử lý ngôn ngữ để xác định tập kết quả của một truy vấn tìm kiếm toàn văn bản. Tìm kiếm văn bản của DB2 có sẵn trên Bản vá lỗi 1 của Phiên bản 9.5 của DB2 cho Linux®, UNIX® và Windows® (DB2 for Linux®, UNIX®, and Windows®, Version 9.5 Fixpack 1) và mới hơn.

Có thể tạo ra các chỉ mục văn bản dựa trên một loạt các kiểu dữ liệu từ các VARCHAR nhỏ đến các BLOB lớn có chứa các đối tượng văn bản. Trong bối cảnh về xử lý chỉ mục của Tìm kiếm văn bản của DB2, với mỗi hàng, nội dung của mỗi cột được xử lý như một tài liệu. Tùy thuộc vào kiểu tài liệu, được định nghĩa theo định dạng chỉ mục văn bản, các trình xử lý tiếp nhận và các trình phân tích cú pháp khác nhau được sử dụng để trích xuất và lọc văn bản.

Ví dụ, một tài liệu XML có thể được tạo chỉ mục hoặc theo định dạng XML hay theo định dạng TEXT (văn bản). Nếu dùng định dạng XML, một trình phân tích cú pháp XML sẽ được sử dụng để phân tích cú pháp và tạo chỉ mục tài liệu và cả hai cú pháp truy vấn SQL và cú pháp giống như-XPath có thể được sử dụng để truy vấn. Trong trường hợp này, có thể sử dụng các phần tử cấu trúc để xác định phần văn bản cần được tìm kiếm, nhưng chính các phần tử cấu trúc lại không phải là một phần thân văn bản có thể tìm kiếm được. Mặt khác, với định dạng TEXT, một trình phân tích cú pháp văn bản-thuần được sử dụng để phân tích và tạo chỉ mục tài liệu. Trong trường hợp này, các phần tử cấu trúc được coi là một phần thân văn bản có thể tìm kiếm được và chỉ có cú pháp truy vấn SQL được áp dụng. Hình 1 cho thấy luồng công việc cơ bản.

Hình 1. Các bước xử lý
Diagram showing flow from Ingest Handler to Parser to Tokenizer to Indexer

Tìm kiếm văn bản của DB2 phụ thuộc vào IBM LanguageWare để phân tích từ vựng. Tìm kiếm văn bản của DB2 sử dụng một cách tiếp cận dựa trên-từ điển cho các ngôn ngữ được hỗ trợ. Còn với các ngôn ngữ khác nó sử dụng một cách tiếp cận xử lý-ký tự và xử lý-từ (không phân tích hình thái học). Các từ tìm kiếm trong một truy vấn tìm kiếm toàn văn bản được phân tích tương tự như việc phân tích được thực hiện trong quá trình tạo chỉ mục. Liệu một tài liệu có được trả về như là một phần của tập kết quả hay không phụ thuộc không chỉ vào các từ và cách chúng được kết hợp trong truy vấn, mà còn vào kết quả của việc xử lý ngôn ngữ và hoàn toàn vào cấu hình của máy chủ văn bản, đặc biệt là các trình phân tích cú pháp và thuật toán tách từ (tokenizer).

Phần này mô tả các khía cạnh về xử lý ngôn ngữ và nó cung cấp các ví dụ về các đặc tính ngôn ngữ ảnh hưởng đến các kết quả tìm kiếm như thế nào.


Các truy vấn tối thiểu

Đối với các truy vấn tối thiểu, các từ tìm kiếm hợp lệ có chứa ít nhất là hai ký tự và chúng không thể chỉ chứa các dấu chấm câu. Liệt kê 1 hiển thị một ví dụ.

Liệt kê 1. Các ví dụ về các truy vấn tối thiểu hợp lệ
select content from sampleen where contains(plaincol, 'to')=1
select content from sampleen where contains(plaincol, 't*')=1
select content from sampleen where contains(plaincol, 'c#')=1

Các ký tự thoát

Các ký tự nào đó có ý nghĩa ngữ nghĩa như là một phần của truy vấn tìm kiếm và chúng cần được đặt dấu thoát (dấu gạch chéo ngược) nếu chúng được dùng là một phần của một từ tìm kiếm. Đặt dấu thoát cho các dấu ngoặc kép đơn và đôi bằng cách tăng gấp đôi dấu ngoặc kép, chẳng hạn như khi dùng Smith''s để tìm kiếm Smith's.

Các ký tự sau đây cần phải được đặt dấu thoát là \ để được xử lý như là một phần của một truy vấn tìm kiếm.

  • Các ký hiệu đòi hỏi ký tự thoát để đạt được một truy vấn hợp lệ về cú pháp
    < [ { ~ = : > ] }
  • Các ký hiệu đòi hỏi ký tự thoát để thay đổi ngữ nghĩa học
    && || ! * ? \ -
  • Các ký tự gây ra các lỗi cú pháp khi dùng riêng và đòi hỏi một ký tự thoát để thay đổi ngữ nghĩa học
    ( ) " “

Tìm gốc của từ và các dạng chính tắc của từ (lemmas)

Tìm gốc của từ là quá trình tìm kiếm một phần không đổi của một từ, đó là đoạn từ vẫn giữ nguyên không thay đổi bất kể thì hay cách thức của từ được sử dụng. Đoạn từ này không nhất thiết phải là gốc hình thái học. Ví dụ:

  • Gốc với cả hai từ produceproductionproduc.
  • Gốc với từ goodgood.
  • Gốc với từ betterbetter.

Dạng chính tắc hóa của từ (lemmatization) là quá trình xác định dạng mẫu không biến cách, cơ bản của một từ. Trong khi xử lý cập nhật chỉ mục, việc phân tích từ vựng xác định các dạng chính tắc của các từ trong tài liệu và sự phân tích bổ sung thêm thông tin này vào chỉ mục văn bản. Vì lẽ đó, với một tìm kiếm từ khóa, các dạng chính tắc của từ tìm kiếm được xác định và tất cả các tài liệu có chứa dạng chính tắc của từ đó được trả về. Ví dụ:

  • Dạng chính tắc với từ goodgood (tốt).
  • Các dạng chính tắc với từ betterbetter (tốt hơn), good (tốt) và well (tốt).
  • Dạng chính tắc với từ wellwell.

Lưu ý sự khác nhau giữa kết quả về tìm gốc của từ và dạng chính tắc hóa của từ với từ better.

Một tìm kiếm với từ good dựa trên dạng chính tắc hóa của từ trả về các tài liệu trùng khớp với từ good hoặc từ better, vì từ good được trùng khớp với chính từ good, và từ good được trùng khớp với sự xuất hiện của dạng chính tắc của từ good có liên quan với từ better. Liệt kê 2 hiển thị kết quả ví dụ về một tìm kiếm từ khóa với từ good.

Liệt kê 2. Kết quả ví dụ về tìm kiếm từ khóa với từ good
select pk, substr(plaincol,1,68) from simpleen where contains(plaincol, 'good')=1
PK       PLAINCOL                                                                   
-------- -----------------------------------------------------------
       4 it is better here                                                   
       5 this is a good story                                                

  2 record(s) selected.

Một tìm kiếm với từ better trả về các tài liệu có chứa từ good, better hoặc well, vì tất cả chúng được liệt kê như là các dạng chính tắc với từ better. Liệt kê 3 hiển thị các kết quả ví dụ về một tìm kiếm từ khóa với từ better.

Liệt kê 3. Kết quả ví dụ về tìm kiếm từ khóa với từ better
select pk, plaincol from simpleen where contains(plaincol, 'better')=1

PK       PLAINCOL                                                                  
-------- -----------------------------------------------------------
       2 it is well done                                                     
       3 the well is deep                                                    
       4 it is better here                                                  
       5 this is a good story                                                

  4 record(s) selected.

Để chỉ lấy ra các tài liệu trùng khớp với từ đó, nhưng không lấy ra các tài liệu trùng khớp với các dạng chính tắc của từ đó, hãy bao bọc từ đó trong hai dấu ngoặc kép. Liệt kê 4 cho thấy kết quả ví dụ về một tìm kiếm cụm từ với từ better.

Liệt kê 4. Kết quả ví dụ về một tìm kiếm cụm từ với từ better
select pk, plaincol from simpleen where contains(plaincol, '"better"')=1

PK       PLAINCOL                                                                   
-------- -----------------------------------------------------------
       4 it is better here                                                   

  1 record(s) selected.

Việc bao bọc từ đó trong hai dấu ngoặc kép loại bỏ các biến thể của từ này và loại bỏ các từ đồng nghĩa và các từ khác có dạng chính tắc tương tự. Tuy nhiên, việc tìm kiếm có phân biệt chữ hoa, chữ thường và một số tiêu chuẩn hóa được áp dụng (xem phần Các dấu Dấu chấm câu). Các tài liệu có thể được trả về mà không trùng khớp chính xác với các ký tự quy định, như thể hiện trong Bảng 1.

Bảng 1. Bảng hiển thị ví dụ về hành vi tiêu chuẩn hóa
Một tìm kiếm các từ này... Cũng trả về các tài liệu có chứa các từ này
Hamlethamlet
resumerésumé
C++C#

Việc mở rộng tìm kiếm với các dạng chính tắc của từ được áp dụng cho từ tìm kiếm trực tiếp, không phải theo cách đệ quy. Ví dụ, từ good là một dạng chính tắc của từ good và từ better, do đó việc tìm kiếm từ khóa trả về các tài liệu có chứa một trong hai từ này đều được. Tuy nhiên, tìm kiếm từ khóa không kèm theo các tài liệu chỉ chứa các từ có các dạng chính tắc khác của từ better, do đó các tài liệu có chứa từ well không được đưa vào.


Biến cách của động từ và biến cách của danh từ, tính từ và đại từ

Thông qua việc xác định các dạng chính tắc của từ, các biến cách của các danh từ, các đại từ, các tính từ, cũng như biến cách của động từ (chia động từ), được công nhận. Các tài liệu có chứa các biến thể như vậy được trả về trong một tìm kiếm từ khóa. Ví dụ, từ ran và từ running được trả về với từ run; và từ testing và từ tested được trả về với từ test, như trong Liệt kê 5.

Liệt kê 5. Kết quả ví dụ về tìm kiếm từ khóa với từ test kèm theo các từ có nhiều biến cách
select pk, plaincol from simpleen where contains(plaincol, 'test')=1

PK       PLAINCOL                                                                   
-------- -----------------------------------------------------------
      16 we are testing this tomorrow                                        
      13 this cannot be tested properly                                     
      14 this is a test program                                              

  3 record(s) selected.

Tìm kiếm cụm từ là nửa chính xác và nó loại bỏ các tài liệu chỉ chứa các phiên bản có nhiều biến cách của từ đó.

Liệt kê 6. Kết quả ví dụ về tìm kiếm cụm từ với từ test loại bỏ các từ có nhiều biến cách
select pk, plaincol from simpleen where contains(plaincol, '"test"')=1

PK       PLAINCOL                                                                   
-------- -----------------------------------------------------------
      14 this is a test program                                              

  1 record(s) selected.

Tùy thuộc vào ngôn ngữ được định nghĩa để tạo chỉ mục hoặc ngôn ngữ được quy định cho một truy vấn, một từ có thể được mở rộng trong lúc phân tích. Với một kho dữ liệu từ vựng của tài liệu ngôn ngữ hỗn hợp, một tài liệu có thể được kèm theo hoặc loại bỏ khỏi kết quả tìm kiếm, tùy thuộc vào ngôn ngữ được sử dụng để lập chỉ mục hoặc truy vấn. Ví dụ, nếu hai tài liệu tiếng Đức được bao gồm trong chỉ mục văn bản tiếng Anh và một tài liệu có chứa một biến cách của từ Regen (mưa), việc phân tích bằng từ điển tiếng Anh không công nhận cách thức sở hữu của từ Regen, đó là từ des Regens, trong khi chỉ mục của tiếng Đức hiển thị cả hai kết quả. Một tài liệu hay một phần của một tài liệu không theo ngôn ngữ chỉ mục được xử lý như một tài liệu theo ngôn ngữ không được hỗ trợ, trừ khi bắt gặp một từ là một phần trong từ điển, trong trường hợp đó từ này sẽ được xử lý theo các quy tắc của tập ngôn ngữ với chỉ mục. Liệt kê 7 hiển thị kết quả theo chỉ mục tiếng Anh.

Liệt kê 7. Kết quả ví dụ về tìm kiếm từ khóa với từ regen theo chỉ mục tiếng Anh
select pk, plaincol from simpleen where contains(plaincol, 'regen')=1

PK       PLAINCOL                                                                  
-------- -----------------------------------------------------------
56 der Sturm brachte Regen mit taubeneigroßen Hagelkörnern

  1 record(s) selected.

Liệt kê 8 hiển thị các kết quả theo chỉ mục tiếng Đức.

Liệt kê 8. Kết quả ví dụ về tìm kiếm từ khóa regen theo chỉ mục tiếng Đức
select pk, plaincol from simplede where contains(plaincol, 'regen')=1

PK       PLAINCOL                                                                  
-------- -----------------------------------------------------------
54 wegen des Regens wurde die Freilichtaufführung abgesagt         
56 der Sturm brachte Regen mit taubeneigroßen Hagelkörnern

  2 record(s) selected.

Các từ không mang trọng âm

Về ngữ pháp các từ không mang trọng âm là độc lập, nhưng là các hình vị, phụ thuộc theo âm vị, chẳng hạn như s sở hữu trong tiếng Anh. Việc xử lý ngôn ngữ chia tách từ đó theo từ không mang trọng âm. Việc tìm kiếm dạng mẫu cơ bản trả về tất cả các biến cách, bao gồm các từ có s, sở hữu, như trong Liệt kê 9.

Liệt kê 9. Kết quả ví dụ về tìm kiếm từ khóa theo dạng mẫu cơ bản
select pk, plaincol from simpleen where contains(plaincol, 'girl')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
     130 We are three siblings, all girls
     131 The girl's sweater is blue
     132 A girl gave me the book.

  3 record(s) selected.

Tìm kiếm cách thức có s sở hữu chỉ trả về một sự trùng khớp chính xác, như trong Liệt kê 10.

Liệt kê 10. Kết quả ví dụ về tìm kiếm từ khóa dựa vào từ có các từ không mang trọng âm
select pk, plaincol from simpleen where contains(plaincol, 'girl''s')=1

PK       PLAINCOL
-------- ------------------------------------------------------------
     131 The girl's sweater is blue

  1 record(s) selected.

Một tìm kiếm cụm từ theo s sở hữu chỉ trả về một sự trùng khớp chính xác, như trong Liệt kê 11.

Liệt kê 11. Kết quả ví dụ về tìm kiếm cụm từ dựa vào từ có các từ không mang trọng âm
select pk, plaincol from simpleen where contains(plaincol, '"girl''s"')=1

PK       PLAINCOL
-------- ------------------------------------------------------------
     131 The girl's sweater is blue

  1 record(s) selected.

Lưu ý rằng vì từ không mang trọng âm này chia tách từ thành các đoạn, nên tài liệu có chứa từ "girl"s" (của cô gái) được trả về với một tìm kiếm cụm từ theo dạng mẫu cơ bản. Liệt kê 12 cho thấy một ví dụ về tìm kiếm cụm từ theo từ cơ bản.

Liệt kê 12. Kết quả ví dụ về tìm kiếm cụm từ theo từ cơ bản
select pk, plaincol from simpleen where contains(plaincol, '"girl"')=1

PK       PLAINCOL
-------- ------------------------------------------------------------
     131 The girl's sweater is blue
     132 A girl gave me the book.

  2 record(s) selected.

Các từ đệm hoặc các từ quá phổ biến

Các từ nào đó có trong chỉ mục văn bản, nhưng có thể không cần so khớp chúng khi chúng được gắn với các từ khác. Vì thế, việc đưa các từ này vào so khớp có lẽ cần một sự tuân thủ rõ ràng như một từ bắt buộc hoặc cần một sự kết hợp với một toán tử Bun. Điều này áp dụng cho cả tìm kiếm từ khóa lần tìm kiếm cụm từ. Các từ đệm này chủ yếu là một tập con các phần tử của các kiểu sau đây:

  • Một số các giới từ, chẳng hạn như inon..
  • Các liên từ kết hợp, trừ các bộ nối câu yetso.
  • Một số trợ động từ, chẳng hạn như can, may, has, am, were,are; không ảnh hưởng đến could, might, ought, shall, should, willwould.
  • Các từ hạn định, chẳng hạn như các mạo từ, các đại từ chỉ định hoặc các từ hạn định sở hữu; không ảnh hưởng đến các từ hạn định phân phối, phân biệt hoặc cấp độ.
  • Các đại từ (tương tự như các từ hạn định).

Ví dụ, một truy vấn với to be chỉ chứa các từ đệm (các từ phổ biến), vì thể sử dụng các từ đệm đó để chọn các sự trùng khớp trong tài liệu, như trong Liệt kê 13

Liệt kê 13. Kết quả ví dụ về tìm kiếm từ khóa chỉ dựa vào các từ phổ biến
select pk, plaincol from simpleen where contains(plaincol, 'to be')=1 

PK 	PLAINCOL 
----- -----------------------------------------------------------
1 	to be or not to be 

1 record(s) selected.

Nhờ việc xử lý các tổ hợp Bun mặc định với các từ đệm, việc so khớp tập trung vào các từ không-đệm nếu có một tổ hợp các từ đệm và từ không-đệm trong một tìm kiếm. Ví dụ, Liệt kê 14 cho thấy một truy vấn to be or not to be với sự tập trung vào từ không-đệm là not.

Liệt kê 14. Kết quả ví dụ về tìm kiếm từ khóa theo các từ hỗn hợp
select pk, plaincol from simpleen where contains(plaincol, 'be or not to be')=1

PK 	PLAINCOL 
----- -----------------------------------------------------------
1 	to be or not to be 
33 	my blog is not here, that's the wrong place 
10 	I can't rest here 
15 	he hasn't rested here 

4 record(s) selected.

Trong trường hợp này, tập kết quả có chứa các phần tử chỉ thực hiện một phần hoạt động AND của toán tử Bun ngầm định. Lưu ý rằng một tìm kiếm cụm từ (bao bọc các từ tìm kiếm trong hai dấu ngoặc kép) trả về các kết quả tương tự. Để có được một sự trùng khớp hơn nữa cho các trường hợp này, hãy sử dụng hoặc là toán tử bắt buộc (+) hoặc một toán tử Bun (AND) hiện rõ trong tìm kiếm từ khóa. Sự khác biệt giữa + và toán tử AND chỉ liên quan đến loại bỏ các từ đồng nghĩa. Ví dụ, Liệt kê 15 có chứa một từ be trong kết quả tìm kiếm.

Liệt kê 15. Kết quả ví dụ về tìm kiếm từ khóa bằng toán tử bắt buộc
select pk, plaincol from simpleen where contains(plaincol, 'to +be or not to be')=1  

PK 	PLAINCOL 
----- -----------------------------------------------------------
1 	to be or not to be 

1 record(s) selected.

Liệt kê 16 cho thấy tìm kiếm tương tự với một toán tử AND hiện rõ.

Liệt kê 16. Kết quả ví dụ về tìm kiếm từ khóa với toán tử AND hiện rõ
select pk, plaincol from simpleen where contains(plaincol, 'to AND be or not to be')=1

PK 	PLAINCOL 
----- -----------------------------------------------------------
1 	to be or not to be 

1 record(s) selected.

Lưu ý rằng để chỉ ra một kết nối Bun, toán tử này phải xuất hiện dưới dạng chữ hoa. or chữ thường không được xử lý như toán tử Bun OR , not chữ thường cũng không được xử lý như NOT. Liệt kê 17 hiển thị một ví dụ.

Liệt kê 17. Kết quả ví dụ về tìm kiếm từ khóa với toán tử NOT hiện rõ
select pk, plaincol from simpleen where contains(plaincol, 'be or NOT to be')=1

PK       PLAINCOL
-------- ------------------------------------------------------------

  0 record(s) selected.

Các ký tự có dấu

Các dấu có các mục đích khác nhau trong các ngôn ngữ khác nhau. Chúng có thể hoặc không thể tạo ra một chữ cái mới. Liệu một dấu có bị bỏ qua trong một tìm kiếm từ khóa phụ thuộc vào ngôn ngữ hay không và liệu một ký tự có là một ký tự mới hay không. Ví dụ, trong tiếng Anh, một tìm kiếm với từ resume đưa ra các tài liệu có chứa từ résumé, như trong Liệt kê 18.

Liệt kê 18. Kết quả ví dụ về tìm kiếm từ khóa liên quan đến các ký tự có dấu không phân biệt được. (Tiếng Anh)
select pk, plaincol from simpleen where contains(plaincol, 'resume')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
      51 let's resume later
      50 show me your résumé

  2 record(s) selected.

Các dấu tạo ra các chữ cái mới phân biệt được. Một tìm kiếm với từ schon theo một chỉ mục tiếng Đức không trả về các kết quả tương tự như một tìm kiếm với từ schöne, trong khi tìm kiếm với từ cafe trả về các kết quả có từ café, như trong Liệt kê 19.

Liệt kê 19. Kết quả ví dụ về tìm kiếm từ khóa liên quan đến các ký tự có dấu không phân biệt được. (Tiếng Đức)
select pk, plaincol from simplede where contains(plaincol, 'cafe')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
      55 wir liefen stattdessen ins Café und setzten uns an ein freies Tischchen

  1 record(s) selected.

Các dấu trên a, o hoặc u tạo ra một chữ cái mới. Do đó, các kết quả tìm kiếm chỉ chứa các mục nhập có một ký tự trùng khớp, như trong Liệt kê 20.

Liệt kê 20. Kết quả ví dụ về tìm kiếm từ khóa liên quan đến các ký tự có dấu phân biệt được. (Tiếng Đức)
select pk, plaincol from simplede where contains(plaincol, 'schon')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
     100 Ist es schon soweit?

  1 record(s) selected.


select pk, plaincol from simplede where contains(plaincol, 'schön')=1

PK          PLAINCOL
----------- -----------------------------------------------------------
        102 Das war eine schöne Feier.

  1 record(s) selected.

Cách viết một từ tương phản về nguyên âm như ae, oe hoặc ue chỉ ánh xạ tới một sự trùng khớp tương ứng chính xác mà không cần mở rộng thêm nữa. Cách tìm kiếm này được áp dụng như một tìm kiếm cụm từ, do đó, không trả về các tài liệu có chứa một biến cách của từ tìm kiếm.

Liệt kê 21. Kết quả ví dụ về tìm kiếm từ khóa có tương phản về nguyên âm mở rộng (Tiếng Đức)
select pk, plaincol from simplede where contains(plaincol, 'schoene')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
     102 Das war eine schöne Feier.

  1 record(s) selected.

select pk, plaincol from simplede where contains(plaincol, 'schoen')=1

PK       PLAINCOL
-------- ------------------------------------------------------------

  0 record(s) selected.

Liệt kê 22 cho thấy từ laufen và läuft trả về các kết quả giống nhau, trong khi từ laeuft thay đổi cách viết được ánh xạ tới từ läuft viết đúng, nhưng không ánh xạ tới các biến cách khác.

Liệt kê 22. Kết quả ví dụ về tìm kiếm có sự tương phản về nguyên âm (dấu hai chấm trên nguyên âm)
select pk, plaincol from simplede where contains(plaincol, 'laufen')=1

PK       PLAINCOL                                                                  
-------- -----------------------------------------------------------
      50 heute war ein wunderschöner Tag voll Sonnenschein, es lief gut         
      52 es läuft gut
      53 nach dem Lauf lass uns Kaffee trinken gehen
      55 wir liefen stattdessen ins Café und setzten uns an ein freies Tischchen 
	
  4 record(s) selected.
  
select pk, plaincol from simplede where contains(plaincol, 'läuft')=1

PK       PLAINCOL                                                                  
-------- -------------------------------------------------------------------
      50 heute war ein wunderschöner Tag voll Sonnenschein, es lief gut     
      52 es läuft gut    
      53 nach dem Lauf lass uns Kaffee trinken gehen
      55 wir liefen stattdessen ins Café und setzten uns an ein freies Tischchen 

  4 record(s) selected.
 
select pk, plaincol from simplede where contains(plaincol, 'laeuft')=1

PK       PLAINCOL                                                                  
-------- -----------------------------------------------------------
      52 es läuft gut
	
  1 record(s) selected.

Các từ ghép

Hiện nay, các máy chủ văn bản được cấu hình để làm việc mà không cần phân tích. Bạn cần thêm một ký tự đại diện để tìm ra một tài liệu có chứa từ tìm kiếm là một phần của một từ ghép. Ví dụ, Liệt kê 23 cho thấy cách tìm ra tất cả các tài liệu có chứa từ rain là phần đầu tiên của một từ ghép.

Liệt kê 23. Ví dụ về tìm kiếm các từ ghép hay dùng
select pk, plaincol from simpleen where contains(plaincol, 'rain')=1

PK       PLAINCOL
-------- --------------------------------------------------------------------

  0 record(s) selected.


select pk, plaincol from simpleen where contains(plaincol, 'rain*')=1

PK       PLAINCOL
-------- --------------------------------------------------------------------
      41 the production today was interrupted by a rainstorm                 

  1 record(s) selected.

Các biến thể của ngôn ngữ

Việc xử lý ngôn ngữ áp dụng tiêu chuẩn hóa viết chính tả. Một tìm kiếm với từ color (màu sắc) trả về các tài liệu có từ colorcolour, đều đúng với cả tìm kiếm từ khóa lẫn tìm kiếm cụm từ.

Liệt kê 24. Kết quả ví dụ về tìm kiếm từ khóa hiển thị các biến thể của ngôn ngữ
select pk, plaincol from simpleen where contains(plaincol, 'color')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
     110 This is a nice color.
     111 I prefer this colour.

  2 record(s) selected.


select pk, plaincol from simpleen where contains(plaincol, 'colour')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
     110 This is a nice color.
     111 I prefer this colour.

  2 record(s) selected.

Sự tiêu chuẩn hóa áp dụng cho các biến thể viết chính tả. Tuy nhiên, ví dụ, không có ánh xạ tự động nào khi một từ khác nhau được sử dụng theo tiếng Anh Anh hoặc tiếng Anh Mỹ để xem xét cùng một đối tượng. Ví dụ, việc tìm kiếm với từ lift (thang máy) không trả về các tài liệu có từ elevator (thang máy). Tuy nhiên, bạn có thể định nghĩa các từ đó trong một từ điển từ đồng nghĩa và áp dụng từ điển từ đồng nghĩa cho chỉ mục văn bản.


Các chữ viết tắt

Không có sự ánh xạ mặc định của các chữ viết tắt nào như là e.g., EKGetc. Vì vậy, tìm kiếm với dạng mẫu viết tắt chỉ trả về các tài liệu có chứa chữ viết tắt đó. Một tìm kiếm với từ đầy đủ chỉ trả về các tài liệu có chứa từ đầy đủ. Các chữ viết tắt phải được thêm vào một từ điển từ đồng nghĩa để được ánh xạ tới từ đầy đủ dùng để xử lý chỉ mục và xử lý truy vấn.


Dấu chấm câu và các ký hiệu

Với cấu hình hiện tại của máy chủ văn bản, dấu chấm câu và các ký tự ký hiệu phổ biến được dùng thay thế cho nhau để tìm ra kết quả so khớp. Điều này áp dụng cho các ký tự sau:

. , ; : @ % ^ & ! + - = ( ) [ ] { } < > ~ # $ €

Các quy tắc sau mô tả cách xử lý các ký hiệu trong các truy vấn.

  • Tập dấu chấm câu và các ký hiệu thay thế cho các thành viên khác của tập này, ngay cả khi từ tìm kiếm được kèm trong hai dấu ngoặc kép hoặc dấu chấm câu được đặt dấu thoát, như trong Liệt kê 25.
Liệt kê 25. Ví dụ về sự thay thế của dấu chấm câu và các ký hiệu
select pk, plaincol from simpleen where contains(plaincol, 'c++')=1

PK          PLAINCOL                                                                  
----------- -----------------------------------------------------------
         31 we knew C+ and Java                                                
         28 she knows C, and C++ and C#                                        
         29 he knows C++                                                       
         30 they know C++ and C#                                               

  4 record(s) selected.

select pk, plaincol from simpleen where contains(plaincol, '"c#"')=1

PK          PLAINCOL
----------- -----------------------------------------------------------
         31 we knew C+ and Java                                                
         28 she knows C, and C++ and C#                                        
         29 he knows C++                                                       
         30 they know C++ and C#                                               

  4 record(s) selected.
  • Các ký tự dấu chấm câu phân chia từ tìm kiếm thành các đoạn có thể tìm kiếm được riêng biệt, như trong Liệt kê 26.
Liệt kê 26. Ví dụ về phân đoạn qua dấu chấm câu
Example Data:
       114 The email-address is toro@lab.sample.com
       115 The email-address is toro.lab@sample.com
       116 The email-address is torolab@sample.com

  select pk, plaincol from simpleen where contains(plaincol, 'lab')=1

PK          PLAINCOL
----------- -----------------------------------------------------------
        114 The email-address is toro@lab.sample.com
        115 The email-address is toro.lab@sample.com

  2 record(s) selected.
  • Sự thay thế này chỉ áp dụng cho các từ ở đó dấu chấm câu, ký hiệu hoặc khoảng trắng ở vị trí giống nhau, như được hiển thị trong Liệt kê 27 và Liệt kê 28.
Liệt kê 27. Ví dụ về sự thay thế đúng vị trí
select pk, plaincol from simpleen where contains(plaincol, 'toro@lab.sample.com')=1

PK          PLAINCOL
----------- -----------------------------------------------------------
        114 The email-address is toro@lab.sample.com
        115 The email-address is toro.lab@sample.com

  2 record(s) selected.
Liệt kê 28. Ví dụ về sự thay thế
Sample Data:
50% picked the first answer for question 4 in the multiple-choice test.
This will cost you 3.50$
It was 50-something degrees Fahrenheit.
This will take 50,000.00, at least 
Take a turn left to I-50.
about 3,50 or so
About 5000 people watched the game.

select pk, plaincol from simpleen where contains(plaincol, '50%')=1

PK          PLAINCOL
----------- -----------------------------------------------------------
        117 50% picked the first answer for question 4 in the multiple-choice test.
        118 This will cost you 3.50$
        119 It was 50-something degrees Fahrenheit.
        120 This will take 50,000.00, at least
        121 Take a turn left to I-50.
        122 about 3,50 or so

  6 record(s) selected.

Trong trường hợp này, ký tự % thay thế các ký tự chấm dấu câu và khoảng trắng khác.

  • Không thể dùng các ký tự đại diện để thay thế dấu chấm câu, ngay cả khi đã đặt dấu thoát (với tìm kiếm từ khóa và tìm kiếm cụm từ), như trong Liệt kê 29.
Liệt kê 29. Ví dụ ở đây các ký tự đại diện không thay thế được dấu chấm câu
Sample Data
        125 it happens some*times
        124 it happens some.times
        126 it happens sometimes
        127 it happens somextimes


select pk, plaincol from simpleen where contains(plaincol, 'some*times')=1

PK          PLAINCOL
----------- -----------------------------------------------------------
        126 it happens sometimes
        127 it happens somextimes

  2 record(s) selected.


select pk, plaincol from simpleen where contains(plaincol, 'some\*times')=1

PK       PLAINCOL
-------- ------------------------------------------------------------
     126 it happens sometimes
     127 it happens somextimes

  2 record(s) selected.


select pk, plaincol from simpleen where contains(plaincol, 'some.times')=1

PK       PLAINCOL
-------- -----------------------------------------------------------
     125 it happens some*times
     124 it happens some.times

2 record(s) selected.

Kết luận

Bài này đã đưa ra một cái nhìn chi tiết vào cách Tìm kiếm văn bản của DB2 đang xử lý các tài liệu để tìm kiếm toàn văn bản và áp dụng các thuộc tính ngôn ngữ và các thuộc tính truy vấn để xác định các kết quả tìm kiếm. Để biết thông tin chung về cú pháp truy vấn được hỗ trợ, hãy xem Trung tâm Thông tin DB2 (xem phần Tài nguyên).

Tài nguyên

Học tập

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

Thảo luận

  • Hãy tham gia vào cộng đồng My developerWorks. Kết nối với người dùng developerWorks khác trong khi khám phá blog, các diễn đàn, các nhóm và wiki với nhà phát triển là trung tâm.

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.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi 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=828772
ArticleTitle=Tìm kiếm văn bản của DB2, Phần 2: Tìm hiểu về xử lý ngôn ngữ để tìm kiếm toàn văn bản trong DB2
publish-date=08022012