.2 Các tham số để điều chỉnh hiệu suất lập chỉ mục

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu các phương pháp nén chỉ số trong các hệ thống tìm kiếm 04 (Trang 56 - 77)

Trong đó các tham số :

mergeFactor: tham số cho phép ta điều chỉnh số lượng Document sẽ chứa trong

bộ nhớ trước khi ghi vào đĩa cũng như là bao lâu thì sẽ trộn những segment này với nhau, giá trị mặc định là 10. Điều này có nghĩa là số segment trên đĩa sẽ là mũ của 10.

Ví dụ giá trị này là 10 thì có nghĩa là sẽ tạo ra 10 segment,mỗi segment có thể chứa 10 Documents,và khi segment thứ 10 được tao ra thì chúng sẽ được merge thành 1 segment có kích thước là 100. Và cứ như thế.

maxMergeDocs:Đây là tham số giới hạn số lượng Document tối đa chứa trong

segment trước khi merger các segments với nhau.

minMergeDocs : tương tự như maxMergeDocs song nó chỉ ra có tối thiểu bao

nhiêu tài liệu chứa trong segment trước khi merge các segment lại với nhau

Như vậy nếu tăng giá trị mergeFactor thì Lucene sẽ sử dụng nhiều bộ nhớ chính

hơn nhưng mật độ ghi xuống đĩa lại ít thường xuyên hơn. Điều này sẽ tăng tốc độ tiến trình index. Tuy nhiên nó sẽ tạo ra nhiều file index hơn và lại làm ảnh hưởng tới việc

tìm kiếm về sau, khi phải truy xuất nhiều file trong thư mục index. maxMergeDocs

càng cao thì thích hợp cho các dữ liệu khối hơn.

Tóm lại mergeFactor và maxMergeDocs càng có giá trị lớn thì tốc độ index sẽ cao

song nếu quá lạm dụng vì có thể ảnh hưởng tới việc tìm kiếm. 3.2.5 Tối ưu hóa việc lập chỉ số

Tối ưu hóa việc đánh chỉ mục: Việc tối ưu hóa tiến trình đánh chỉ mục là tiến trình trộn nhiều file chỉ mục lại với nhau để giảm thiểu thời gian đọc chỉ mục trong

quá trình tìm kiếm. Bằng việc sử dụng API của lucene mà cụ thể là hàm optimize() của

đối tượng IndexWriter ta có thể dễ dàng tối ưu điều này. Tuy nhiên việc làm này chỉ có hiệu quả tăng tốc độ tìm kiếm trên chỉ mục đã có, mà không có tác động tới tốc độ đánh chỉ mục. Lucene kết hợp lập các phân đoạn bằng cách tạo ra các các segment hoàn toàn mới mà nội dung cuối cùng là đại diện cho các phân đoạn cũ kết hợp lại. Vì vậy trong khi tối ưu không gian ở đĩa sử dụng tăng lên. Khi kết thúc việc tạo ra các segment mới, Lucene loại bỏ tất cả các segment cũ bằng cách loại bỏ các tập tin chỉ

3.3 Tìm kiếm trên tập chỉ số

IndexSearch đảm bảo việc trực tiếp liên hệ với Index, và xử lí việc tạo nên các Topdoc của Lucene. Sau khi truy vấn được phân tích thành truy vấn chuẩn thì sẽ truy vấn đến IndexSearch và cho lại kết quả.

API của Lucene cung cấp khả năng tìm kiếm một cách đơn giản dễ dàng. Tuy nhiên đằng sau đó bao gồm các cơ chế phức tạp có thể đáp ứng yêu cầu tìm kiếm như trả lại các tài liệu đầu tiên phù hợp nhất và lấy kết quả nhanh chóng.

Khi người sử dụng truy vấn trên tập chỉ mục Lucene, một đối tượng hits sẽ

được trả về. Đối tượng này chứa danh sách các đối tượng ScoreDoc đã được sắp xếp mặc định theo điểm số (score). Lucene tính điểm cho mỗi tài liệu rồi đưa ra một truy vấn. Trong hầu hết các ứng dụng hiển thị kết quả tìm kiếm người dùng truy cập chỉ có vài tài liệu đầu tiên. Đối với tập chỉ số lớn nó thậm chí còn không thể thu thập tất cả các tài liệu phù hợp vào bộ nhớ có sẵn.

3.3.1 Tìm kiếm một thuật ngữ cụ thể

Việc phân tích câu truy vấn nhằm mục đích tìm kiếm ra tài liệu có chứa từ cần tìm. Tuy nhiên việc đánh chỉ mục diễn ra trên nhiều trường khác nhau (Fields). Do đó muốn tìm tài liệu ứng với trường nào đã đánh chỉ mục thì cần xác định rõ ràng.

IndexSearcher là lớp trung ương sử dụng để tìm kiếm các tài liệu trong một chỉ mục. Nó có một số phương pháp tìm kiếm qua tải. Có thể tìm kiếm một từ cụ thể bằng cách sử dụng phương pháp tìm kiếm thông dụng nhất. Đối tượng hits trả về từ cần tìm kiếm đóng gói truy cập vào các tài liệu hiệu quả.

3.3.2 Bộ chuyển đổi câu truy vấn của người dùng: QueryParser

Hai yêu cầu quan trọng trong ứng dụng tìm kiếm đòi hỏi là: chuyển đổi câu truy vấn và truy xuất thông tin trả về. Hầu hết các phương thức Lucene đòi hỏi đối tượng Query. Việc chuyển đổi câu truy vấn là việc biểu diễn câu truy vấn của người dùng thành đối tượng Query phù hợp để sau đó truyền vào hàm tìm kiếm của lucene. Lucene có thể tìm ra kết quả chỉ khi câu truy vấn truyền vào là đúng định dạng của nó. Chẳng hạn như ví dụ sau:

Để thực hiện được việc chuyển đổi câu truy vấn của người dùng, QueryParser cần thêm một đối tượng khác gọi là bộ phân tích Analyzer-sẽ đề cập trong chương sau.

Ở đây ta chỉ cần biết là tùy vào việc chọn lựa bộ Analyzer để phân tích chuỗi truyền vào thì kết quả sẽ khác nhau. Điều ta cần nhớ là index dùng bộ Analyzer nào thì khi tìm kiếm ta nên dùng lại bộ Analyzer đó.

Như ví dụ trên người dùng truy vấn bằng chữ viết hoa trong dữ liệu đánh chỉ mục đã lưu trữ thì lại là chữ thường. Do đó dùng SimpleAnalyzer đã sử dụng trong việc index, sẽ chuyển đổi câu truy vấn thành chữ thường và vì thế sẽ tìm ra kết quả trong quá trình tìm kiếm.

QueryParser sử dụng nhiều toán tử luận lí để thực hiện việc chuyển đổi câu

truy vấn như: OR, AND, NOT. Mặc định là OR. Chẳng hạn câu truy vấn sau: abc xyz thì sẽ được phân tích thành là abc or xyz or (abc and xyz). Để thay đổi tham số mặc

định này cần đặt lại toán tử cho đối tượng QueryParser.

3.3.3 Sử dụng lớp IndexSearcher

Lớp IndexSearcher của Lecene giống như hầu hết các hàm API khác nó rất dễ sử dụng. Việc khởi tạo thể hiện IndexSearcher thực hiện bằng các tham số khác nhau

 Bằng Directory chứa dữ liệu đã index

 Bằng đường dẫn tới file hệ thống

Sau khi tạo ra đối tượng IndexSearcher sẽ gọi phương thức search để thực hiện việc tìm kiếm. Có ba phương thức chính để tìm kiếm. Song ta chủ yếu sử dụng phương thức search(Query), tức tham số là câu truy vấn Query.

3.4 Tiến trình phân tích của Lucene

Trong Lucene phân tích (analysis) là quá trình chuyển đổi các field văn bản về dạng trình bày chỉ mục cơ bản nhất (term). Các terms thì được sử dụng để xác định rõ

tài liệu nào sẽ phù hợp với một câu truy vấn trong quá trình tìm kiếm. Bộ phân tích

(analyzer) là cách nói tóm lược quá trình phân tích. Analyzer phân tích trong đoạn văn bản thành tokenizes, đó là quá trình rút trích các từ, bỏ đi hệ thống các dấu chấm câu, chuyển toàn bộ các chữ trong văn bản về dạng chữ thường ( lowercasing hay còn gọi là normalizing), loại bỏ các từ chung (common words), giảm số lượng từ từ văn bản đưa vào (root form hay còn gọi stremming). Quá trình này còn được gọi là

tokenization, chuyển đoạn văn bản thành nhiều khúc văn bản được gọi là các token,

Tokens được kết hợp với các field name của chúng được gọi là terms.

Mục đích chính của Lucene là kết quả có thể thu hồi được thông tin dễ dàng, vì vậy điều quan trọng đó là quá trình làm tinh dữ liệu từ dữ liệu thô đưa vào. Sau quá

trình tạo ra terms, terms sẽ là những khối dữ liệu được dùng để tìm kiếm trực tiếp. Vì vậy chọn bộ phân tích đúng đắn là cốt yếu quan trọng của quá trình phát triển phần mềm tìm kiếm. Ngôn ngữ là một yếu tố phải được nghĩ đến để chọn bộ phân tích, bởi vì đều có đặc trưng riêng và duy nhất của từng ngôn ngữ. Kế tiếp đó là phạm vi của đoạn text, ví dụ tìm kiếm văn bản sẽ có phạm vi tìm kiếm khác với tìm kiếm media. Phải quan tâm đến các yếu tố khác như các thuật ngữ, thành ngữ, các từ viết tắt từ các bộ chữ ghép lại (ví dụ như NATO: North Atlantic Treaty Organization), … Lucene là nền tảng để chúng ta có thể tạo ra bộ tìm kiếm theo ý muốn.

Một vài đặc điểm quan trọng của 4 bộ phân tích có trong Lucene:

WhitespaceAnalyzer: không thực hiện lowercase(chuyển tất cả sang ký tự

thường), vẫn giữ dấu “-“ , loại bỏ tất cả các khoảng trắng, và dựa vào các khoảng trắng để làm đường biên phân chia tokenize.

SimpleAnalyzer: thực hiện lowercase, vẫn giữ các từ nằm trong danh sách stop-

word, dùng các ký tự không phải là các chữ cái alphabetic để làm đường biên phân chia tokenize.

Cả SimpleAnalyzer và StopAnalyzer đọc sai tên thông tin bằng cách tách và loại

bỏ 1 số kí tự (ví dụ: xy&z bị rã ra thành [xy] [z] , loại bỏ ký hiêu &) .

StopAnalyzer và StandarAnalyzer loại bỏ các từ nằm trong Stop-Word (a, an,

the, so on)

StandarAnalyzer vẫn giữ được tên và thực hiện chức năng lowercase, loại bỏ

dấu “-” , giữ được địa chỉ email (xyz@example.com).

Bộ phân tích là một khía cạnh trong Lucene có nhiều vấn đề cần được quan tâm và nỗ lực giải quyết một cách xứng đáng. Sử dụng StandartAnalyzer là bí quyết để dùng cho quá trình indexing analysis cho nhiều ứng dụng chung, nhưng điều quan trọng trong quá trình phân tích, người sử dụng cung cấp một đoạn text tìm kiếm và thường có thể sẽ gây ra những kết quả nhầm lẫn, ví dụ khi tìm kiếm “to be or not to be” sẽ không cho một kết quả nào vì trong lúc quá trình analyzer các từ nằm trong bộ lọc đã loại bỏ các từ nằm trong danh sách StopWord.

Khi thay đổi bộ phân tích thì đều bắt buộc phải rebuild lại index và cũng sử dụng bộ phân trích mới cho tất cả tài liệu đã được phân tích trước đó.

3.5 Định dạng chỉ số trong lucene 3.5.1 Cấu trúc chỉ số 3.5.1 Cấu trúc chỉ số

Lucene hỗ trợ hai cấu trúc chỉ số: chỉ số multifile và chỉ số compoud

Tập chỉ mục được tạo bởi Indexer trong đó có một số tập tin có tên ngẫu nhiên.

Có một số tập tin có cùng tiền tố, tiếp theo là phần mở rộng khác. Điều này dẫn đến

một khái niệm phân đoạn (segments)

+ Index segments: Tập chỉ mục trong Lucene bao gồm một hoặc nhiều

segments, mỗi segment được tạo thành từ một số tập tin chỉ mục. Tập tin chỉ mục

thuộc cùng phân đoạn sẽ chia sẻ một tiền tố phổ biến và hậu tố khác nhau. Mỗi segment như một subindex (chỉ mục con) mặc dù mỗi đoạn không phải là một chỉ số hoàn toàn độc lập, và mỗi segment như vậy chứa một hoặc nhiều tập tài liệu

(Documents) trong Lucene được thêm chỉ số vào bởi phương thức addDocument trong lớp IndexWriter. Việc thực hiện chia các segment như vậy nhằm các hỗ trợ chức năng

sau:

+ Tăng chỉ mục: Sử dụng phân đoạn nhằm cho phép nhanh chóng thêm tài liệu mới vào chỉ mục bằng cách thêm chúng vào phân đoạn chỉ số mới được tạo ra và chỉ định kỳ kết hợp chúng với các phân đoạn khác hiện có. Quá trình này hiệu quả trong việc bổ sung vì nó làm giảm thiểu thay đổi chỉ số vật lý. Một trong những điểm mạnh của Lucene là nó hỗ trợ tăng lập chỉ mục mà không phải thay đổi trong thư viện của IR khi thêm dữ liệu mới, hữu ích cho nguồn dữ liệu lớn. Sau khi tài liệu được thêm chỉ mục, nội dung của nó sẽ được thực hiện tìm kiếm ngay lập tức.

+ Các segment mới được tạo ra như các tập chỉ mục của tài liệu mới, số lượng các segment và tập tin chỉ mục được thay đổi trong khi lập chỉ mục được tiến hành. Khi một chỉ mục được xây dựng đầy đủ số lượng các tập tin chỉ mục và segment vẫn ổn định.

Trong tập tin chỉ số multifile, số lượng tập tin chỉ mục phụ thuộc vào số lượng các trường (Fields) được lập chỉ mục hiện diện trong các chỉ số. Trong cấu trúc này segment mới được tạo ra như các tài liệu được thêm vào để lập chỉ mục. Từ một phân đoạn bao gồm một tập hợp các tập tin chỉ mục điều này dẫn đến tạo ra nhiều tập tin trong thư mục tập chỉ mục. Mặc dù cấu trúc chỉ số multifile là đơn giản tuy nhiên nó không phù hợp cho tập dữ liệu với số lượng lớn. Bởi như ta thấy Lucene có tạo ra các segment mới khi các tài liệu mới được thêm vào và nó cũng kết hợp chúng để giảm số lượng các tập tin chỉ mục. Tuy nhiên trong khi thủ tục hợp nhất được thực hiện thì số lượng các tập tin chỉ mục được tăng gấp đôi. Nếu Lucene được sử dụng trong một môi trường với rất nhiều chỉ số đang được tìm kiếm hoặc lập chỉ mục trong cùng một lúc nó có thể đạt tới mức giới hạn của hệ điều hành.

Sự khác biệt có thể nhìn thấy rõ giữa multifile index và compoud index là nội

dung của tập chỉ mục. Trong tập chỉ mục compound (tập chỉ mục hợp nhất) thay vì phải mở nhiều tập tin từ tập các chỉ số như trong multifile thì nó chỉ có hai tập tin khi truy cập vào chỉ số hợp nhất này do đó hệ thống sử dụng ít dung lượng. Chỉ số compound làm giảm số lượng tập tin chỉ mục nhưng nội dung về segment, tài liệu, các

field và các term vẫn duy trì và giữ nguyên. Một sự khác biệt là chỉ số compound chứa

một tập tin duy nhất .cfs cho mỗi segment trong khi đó mỗi segment lại chứa nhiều tập tin khác nhau trong multifile. Như vậy tập tin chỉ mục compound đóng gói các tập

chỉ mục trong một tập tin duy nhất có phần mở rộng là .cfs

3.5.2 Chỉ số ngược

Lucene lưu trữ tập chỉ mục theo cấu trúc chỉ mục ngược (inverted index). Cấu trúc này bao gồm các thành phần:

Hình 3.3 - Các thành phần định dạng trong tập chỉ mục ngược [16]

- Field name (.fnm): Tập tin .fnm chứa tất cả các tên trường được sử dụng bởi các tài

liệu trong segment liên quan. Mỗi lĩnh vực được đánh dấu để chỉ ra cho nó là chỉ mục hoặc là vector. Thứ tự của các field trong file .fnm được xác định trong quá trình lập chỉ mục và không nhất thiết lập theo thứ tự abc. Vị trí của các field trong tập tin được sử dụng để liên kết nó với các tập tin bình thường (các tập tin với hậu tố .f)

- Term dictionary (.tis):Tất cả các term (bộ dữ liệu tên trường và giá trị) trong một

segment được lưu trữ trong tập tin .tis. Các term được sắp xếp theo bản chữ cái đầu tiên của tên trường và sau đó theo giá trị trong một lĩnh vực. Mỗi mục từ chứa các

- Term frequencies (.frq): Tần số xuất hiện các term được liệt kê trong tập tin .frq. Tần

số của thuật ngữ trong tập tài liệu là yếu tố để tính điểm ưu tiên (score) và làm tăng độ ưu tiên (Boots) của tập tài liệu cho tần số cao hơn.

Đối với mỗi tài liệu được liệt kê trong tập tin .frq có vị trí các tập tin chứa các mục cho mỗi lần xuất hiện thuật ngữ này trong tài liệu.

- Term positions: Tập tin .prx liệt kê vị trí của mỗi term trong một tài liệu. Các thông

tin về vị trí được sử dụng khi truy vấn yêu cầu, chẳng hạn như truy vấn cụm từ và truy vấn span. Thông tin vị trí của các trường tokenized lấy trực tiếp từ vị trí các token trong quá trình phân tích.

TỔNG KẾT CHƯƠNG 3

Trong chương này luận văn tập trung nghiên cứu các thành phần cơ bản trong Lucene, các tiến tình lập chỉ số, các thành phần định dạng chỉ số trong tập chỉ mục ngược Lucene, phân tích phương thức tối ưu hóa việc lập chỉ mục áp dụng vào máy tìm kiếm. Chương trình cài đặt cho thuật toán nén chỉ mục và quy trình xây dựng tập chỉ mục theo Lucene sẽ được trình bày ở chương 4.

CHƯƠNG 4 - CÀI ĐẶT THỬ NGHIỆM VÀ KẾT QUẢ THỰC HIỆN

4.1 Giới thiệu chương trình thử nghiệm

Trong phạm vi luận văn này, tôi áp dụng thuật toán nén chỉ mục VB code và thuật toán cải tiến OPT-PFD vào chương trình thực nghiệm

Để thực nghiệm kết quả của nén chỉ số VB code và OPT-PFD, tôi đã thể hiện thuật

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu các phương pháp nén chỉ số trong các hệ thống tìm kiếm 04 (Trang 56 - 77)

Tải bản đầy đủ (PDF)

(77 trang)