2013-10-24 15 views
6

Mediawiki có một bảng trong 'văn bản' của cơ sở dữ liệu chứa nội dung trang. Nó được lưu dưới dạng tệp [BLOB]. Tôi muốn chạy truy vấn để tìm kiếm thông qua tất cả văn bản trên trang web để xem trang nào chứa một 'chuỗi' nhất định. Làm cách nào để chạy truy vấn để tìm kiếm các tệp [blob]?Cách chạy truy vấn để tìm chuỗi trong tệp blob?

+0

Nếu tôi nhớ chính xác, MediaWiki có thể nén nội dung của bảng 'văn bản'. Bạn có chắc đó không phải là trường hợp của bạn? – svick

+0

Nó nói trong tài liệu rằng cột 'old_flags' có thể chứa tệp gzip nhưng nó cũng là tệp blob và khi tôi tải xuống, tôi không thể thấy tệp gzip. Tôi có một lượng lớn nội dung trên wiki của mình, tôi muốn tìm kiếm mặc dù tất cả nội dung, tôi không thể tải xuống và giải nén từng trang. Bất kỳ ý tưởng làm thế nào để làm điều này? – LTech

Trả lời

6

Văn bản đánh dấu Mediawiki được lưu trữ trong trường old_text, là loại mediumblob. Bạn có thể truy vấn nó giống như bất kỳ trường dựa trên văn bản nào khác. MySQL sẽ đúc chuỗi của bạn thành nhị phân cho truy vấn. Lưu ý rằng đây là tìm kiếm phân biệt chữ hoa chữ thường!

select old_id from text where old_text like "%string%"; 

Nếu bạn cần trường vô cảm thì bạn cần phải áp dụng một cách phù hợp character set với một case-insensitive chiếu đến cột:

SELECT old_id from text where CONVERT(old_text USING latin1) like '%STRing%'; 

Hãy nhận biết rằng nếu bảng của bạn là không nhỏ các truy vấn này sẽ mất nhiều thời gian.

0

Theo bảng văn bản mediawiki documentation chỉ lưu trữ văn bản cho bản sửa đổi. Do đó để truy cập vào văn bản hoàn chỉnh, tất cả các sửa đổi tương ứng với một trang cần phải được xử lý. Tốt hơn là sử dụng lệnh gọi API tới mediawiki search engine và xử lý kết quả hơn tìm kiếm bằng truy vấn SQL.

Các vấn đề liên quan