Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Đút XML cho Sphinx từ Erlang 1085

ngocdaothanh.myopenid.com 172
Updated over 2 years ago

Sphinx là search engine tốc độ cao có tiếng hiện nay. Một số trang web lớn của Việt Nam như RồngBay.com đã sử dụng thành công Sphinx. Trước đây Sphinx chỉ hỗ trợ SQL DB như MySQL và PostgreSQL, từ phiên bản 0.9.9-rc2 trở đi Sphinx hỗ trợ thêm XML, giúp Sphinx mở rộng thị trường ra rất nhiều. Tiếp theo bài viết về làm từ điểnsearch CJK, bài viết này trình bày cách đút XML từ chương trình Erlang cho Sphinx (ví dụ dữ liệu lấy từ Mnesia), thông qua đó trình bày cách tạo XML từ Erlang. Để hiểu, cần biết sơ sơ Erlang và đọc qua ít nhất một lần tài liệu của Sphinx.

sphinx.conf

Sphinx cung cấp 3 chương trình:

  • indexer: để tạo chỉ mục từ dữ liệu có cấu trúc. Mỗi đơn vị dữ liệu đều có ID. Chỉ mục có thể hiểu đơn giản là vector trỏ từ text trong dữ liệu sang ID.
  • searchd: chính là search engine. Nó dựa vào các chỉ mục tạo bởi indexer và keyword cần search để trả về ID.
  • search: chương trình search từ dòng lệnh, chủ yếu dùng để thử nghiệm chỉ mục tạo bởi indexer.

Cả 3 đều dựa vào cùng tập tin cấu hình sphinx.conf để hoạt động. Ví dụ:

source content
{
type = xmlpipe2
xmlpipe_command = erl -noshell -pa ebin -mnesia dir mnesia -s m_content sphinx_xml -s init stop
xmlpipe_fixup_utf8 = 1
}

index content
{
source = content
path = sphinx/content
charset_type = utf-8
html_strip = 1
}

indexer
{
mem_limit = 64M
}

searchd
{
listen = 3312
log = log/sphinx_searchd.log
query_log = log/sphinx_query.log
pid_file = log/sphinx_searchd.pid
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
}

Trong cấu hình trên quan trọng nhất là xmlpipe_command. Đây chính là lệnh indexer sẽ gọi khi muốn lấy dữ liệu XML để tạo chỉ mục. Lệnh này cần xuất XML theo qui định của Sphinx ra standard out.

Xuất XML từ chương trình Erlang

Có 2 cách. Đơn giản nhất là nối chuỗi, vì XML bản chất cũng chỉ là chuỗi kí tự bình thường. Cách khác giúp escape tự động, đảm bảo cấu trúc XML v.v. là dùng thư viện như xmerl.

Kết nối với searchd từ Erlang

Hiện Erlang có thư viện giza rất dễ dùng. Từ phiên bản 0.9.9-rc2 Sphinx hỗ trợ thêm giao thức MySQL, có thể dùng bất kì driver MySQL nào để kết nối với searchd.

Đọc thêm

  • Sphinx: Search Outside the Box 1 2 3
  • xmlpipe2 1 2

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content