Full trong full text search nghĩa là gì?
fulltext search
2
White

Ngoc Dao viết ngày 21/03/2016

Nghĩa là full-text search, chứ không phải full text-search.

Có 2 cách giải thích, dựa trên tương phản:

Full text vs không full text

Ví dụ bài viết có 3 phần:

  • Tiêu đề
  • Các tag
  • Thân bài

Nếu khi search, ta chỉ cho search trong tiêu đề và các tag, không cho search trong thân bài, thì đó không phải là full-text search. Thân bài thường rất dài so với hai cái kia, nên ví dụ vì lí do tốc độ search (search trong cả thân bài thì sẽ rất chậm), hoặc vì lí do dung lượng lưu trữ không cho phép (lưu thông tin index về thân bài sẽ tốn nhiều dung lượng), nên ta không thể cho search cả thân bài.

Nếu ta cho search ở cả thân bài, thì đó là full-text search.

Nghĩa là full-text search nghĩa là ta cho phép search toàn bộ văn bản, thay vì chỉ một phần văn bản.

Term search vs full-text search

Ví dụ có văn bản: I ate pho yesterday.

Nếu ta search "ate" đương nhiên sẽ ra văn bản trên.

Nếu search "eat" ("ate" là quá khứ của "eat") mà cũng vẫn ra, thì đó là full-text search. Nếu không ra, thì đó chỉ là term search. Term search thường để search keyword, vì thường đối với keyword thì ta muốn search exact match, không muốn biết đổi.

Nghĩa là full-text search cao cấp hơn, nó hiểu "eat", "eating", "eaten" v.v. cũng cùng một duộc với "ate" trong văn bản ban đầu.

Làm được như vậy, vì full-text search engine thường đều có hai thành phần quan trọng sau:

  • Phân tách các từ rời ra khỏi câu (tokenizer/analyzer). The quick brown fox jumps over the lazy dog, thì engine sẽ tách ra các từ "quick", "brown", "fox", "jumps"...
  • Gộp các từ có cùng gốc lại làm một (stemer). Ví dụ văn bản gồm nhiều từ "jumps", "jumped", "jumping", "jumper"... thì engine cũng gộp chúng lại thành từ gốc là "jump".

Hai cái trên phụ thuộc ngôn ngữ. Ví dụ:

  • Tiếng Anh có thể nhờ khoảng trắng để phân tách từ, nhưng tiếng CJK (Chinese, Japanese, Korean) lại phải dùng chiêu thức khác vì các từ viết dính sát nhau.
  • Tiếng Tàu không cần stemer nhưng tiếng Nhật lại cần.

Thường các engine đều được thiết kế tách làm 2 phần: phần không phụ thuộc ngôn ngữ và phần phụ thuộc ngôn ngữ. Khi muốn hỗ trợ thêm ngôn ngữ nào thì chỉ việc thêm tokenizer và stemer cho ngôn ngữ đó.

Muốn rõ hơn, hãy đọc loạt bài Full Text Search, từ khái niệm đến thực tiễn.

Bài tập

Hãy dùng full-text search engine (Sphinx, Lucene v.v.) để viết chương trình tra từ điển.

Ví dụ có thể viết từ điển Anh-Nhật dựa trên dữ liệu EDICT. Dữ liệu này có hơn 170 ngàn mục từ, ở dạng plain text chưa nén kích thước khoảng 15 MB, quá xịn.

Dữ liệu gốc là tập tin plain text theo encoding EUC-JP. Chuyển nó sang encoding UFT-8 bằng lệnh:

iconv -f euc-jp -t utf8 tên-tập-tin

Tham khảo

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
252 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
56 6
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết 2 năm trước
56 6
White
32 0
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết gần 2 năm trước
32 0
White
28 1
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết gần 2 năm trước
28 1
Bài viết liên quan
Male avatar
1 0
Mecab va Cabocha la 2 công cụ phân tích ngôn ngữ nổi tiếng trong tiếng Nhật. Hơn hẳn so với VNtokenizer và VNtagger trong tiếng Việt, Mecab là công...
skul169 viết hơn 2 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
252 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!