Tích hợp các hệ thống tìm kiếm nhƣ solr

Một phần của tài liệu Nghiên cứu áp dụng các kỹ thuật phát triển web tiên tiến làm tăng tốc độ tối ưu hiệu năng của ứng dụng web (Trang 50 - 54)

Những hệ thống web lớn cần tích hợp hệ thống indexing riêng nhƣ solr để index dữ liệu giúp tìm kiếm nhanh hơn giảm tải truy vấn cho tầng database [27].

 Sơ lƣợc về solr

Apache Solr là một open source full-text search platform dựa trên Apache Lucence. Lucene là một thƣ viện đƣợc viết bằng Java dùng để phân tích, đánh chỉ mục (indexing) và tìm kiếm thông tin đƣợc phát triển đầu tiên bởi Doug Cutting vào năm 2000. Cutting đồng thời cũng là tác giả của Hadoop lúc ông đang làm việc cho Yahoo vào năm 2005.

Apache Solr khởi đầu là một project nội bộ của CNET đƣợc tạo ra bởi Yonik Seeley, nhằm phục vụ chức năng tìm kiếm của website CNET vào năm 2004 và đƣợc đóng góp cho Apache Software Foundation năm 2006. Solr không

40

hoàn toàn là một RESTful interface của Lucene mà là sử dụng Lucene nhƣ là một component trong toàn bộ hệ thống. Sau phiên bản Solr 1.4, từ version 3.1 (tháng 3, 2011) thì Solr và Lucene dùng chung một codebase và version number.

 Kiến trúc tổng quát

Tổng quát thì Solr bao gồm có nhiều thành phần (components) khác nhau bao gồm:

 Apache Lucene để phân tích, đánh chỉ mục tìm kiếm dữ liệu.

 Apache Tika dùng để trích xuất metadata, tìm kiếm và chỉ mục nhiều loại file document khác nhau nhƣ pdf, docx, mp3, jpg (hỗ trợ 66 file types khác nhau).

 Apache UIMA (đọc nhƣ you-eee-mah, Unstructured Information Managemen Architecture), đây cũng là một project thuộc Apache Foudnation, nó đƣợc dùng để phân tích một lƣợng lớn dữ liệu không có cấu trúc nhằm tìm ra đƣợc những thông tin có ích cho ngƣời dùng. Ví dụ Phân tích các phim và trích xuất phụ đề rồi dựa vào đó để tìm ra diễn viên nào đóng trong phim đó. Tìm các bài viết, video, hình ảnh có liên quan tới chủ đề của một bài viết cụ thể nào đó.

 Apache Velocity là một Java-based template engine. Carrot2 (search results clustering engine) dùng để phân loại và nhóm các kết quả tìm kiếm thành những danh mục có cùng chủ đề (thematic categories).

 Các chức năng nổi bật

 Hỗ trợ cấu hình mềm dẻo (flexible configuration)

 Kiến trúc cho phép mở rộng (extensible architecture)

 Hỗ trợ nhiều ngôn ngữ (Multilingual)

Bằng việc hỗ trợ cấu hình dễ dàng các filter và tokenizer, nên Solr có thể giải quyết các vấn đề của các ngôn ngữ khác nhau. Về mặt kỹ thuật, thì chúng ta có thể xem thêm trang Analyzers, Tokenizer and Token Filters. và trang Language Analysis. Analyzer Analyzer đóng vai trò khảo sát các trƣờng văn bản để tạo ra một token stream. Ví dụ WhitespaceAnalyzer xử lý phân tích văn bản thành những token dựa trên khoảng trắng. Analzyer đƣợc chỉ định nhƣ là một thuộc tính của của thẻ trong file cấu hình schema.xml. chẳng hạn “The quick brown fox jump over the lazy dog” sẽ đƣợc phân tích thành các tokens: [The] [quick] [brown] [fox] [jump] [over] [the] [lazy] [dog].

41

<fieldtype class="solr.TextField" name="nametext">

<analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"> </analyzer>

</fieldtype>

Tokenizer Nếu nhƣ Analyzer tạo ra các token streams/input stream, thì Tokenizer chia nhỏ các stream đó thành những tokens (đơn vị nhỏ nhất để index, có thể là từ hay ký tự). Các ký tự trong input stream có thể bị bỏ qua nhƣ các ký tự không nhìn thấy đƣợc (whitespace nhƣ khoảng trắng, tab) hay các dấu phân cách (delimiter nhƣ dấu phẩy, dấu chấm).

Đối với các ngôn ngữ CJK (Trung-Nhật-Hàn) phải dùng tới N-Gram tokenizer. Tokenizer này sẽ tách input stream thành những token theo từng cụm có độ dài N tùy theo chúng ta cấu hình. Ví dụ với từ “bycicle” và N=4 –> N=5 thì chữ bycicle đƣợc phân tích thành các tokens nhƣ sau: [bicy], [icyc], [cycl], [ycle], [bicyc], [icycl], [cycle]

<analyzer>

<tokenizer class="solr.NGramTokenizerFactory" minGramSize="4" maxGramSize="5 "/>

</analyzer>

Điều này có thể không có ý nghĩa với tiếng Anh nhƣng với tiếng Trung- Nhật-Hàn thì nó rất có ý nghĩa. Bởi vì các ngôn ngữ này không các từ không cách nhau bởi khoảng trắng và sự kết hợp của một ký tự với ký tự đi trƣớc hay sau nó cũng mang ý nghĩa khác nhau. Có thể lấy ví dụ nhƣ chữ đích (的), tùy theo kết hợp với các chữ khác mà nó mang ý nghĩa khác nhau. Ví dụ 目的 (mục đích), 的确 (đích xác), 是的 (đích thị), do tiếng Trung không phân cách bằng khoảng trắng cho nên việc index các tổ hợp có ý nghĩa rất quan trọng trong việc tìm kiếm.

<fieldType name="text" class="solr.TextField"> <analyzer>

<tokenizer class="solr.StandardTokenizerFactory"/> </analyzer>

42

Filter Giống nhƣ Tokenizer, Filter làm nhiệm vụ đọc input stream và tạo ra các token, nhƣng dữ liệu đầu vào sẽ đƣợc xử lý thêm (ví dụ chuyển chữ hoa thành chữ thƣờng, chuyển từ viết tắt (tên bang, tên thành phố) thành kiểu viết đầy đủ hoặc ngƣợc lại). (adsbygoogle = window.adsbygoogle || []).push({});

<fieldType name="text" class="solr.TextField"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StandardFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.EnglishPorterFilterFactory"/> </analyzer> </fieldType>

43

Chƣơng 3. PHƢƠNG PHÁP KIỂM THỬ PHÂN TÍCH ĐÁNH GIÁ KẾT QUẢ HIỆU NĂNG

Trong chƣơng này đề cập đến cách sử dụng công cụ để kiểm thử hiệu năng. Tƣ tƣởng và phƣơng pháp kiểm thử hiệu năng. Cách dựng môi trƣờng kiểm thử hiệu năng. Phƣơng pháp phân tích các báo cáo hiệu năng. Cách sử dụng các công cụ để điều tra, giải quyết các vấn đề hiệu năng mắc phải.

Một phần của tài liệu Nghiên cứu áp dụng các kỹ thuật phát triển web tiên tiến làm tăng tốc độ tối ưu hiệu năng của ứng dụng web (Trang 50 - 54)