2011-07-27 14 views
5

Tôi muốn thực hiện tìm kiếm chuỗi con chung trong hàng tỷ chuỗi. Yêu cầu này hơi khác so với tìm kiếm toàn văn chung vì tôi muốn truy vấn "ubst" cũng có thể nhấn "chất nền".Tạo chỉ mục cho tìm kiếm chuỗi con?

Lucene hoặc Sphinx có khả năng thực hiện việc này không? Nếu không, bạn nghĩ cách nào tốt nhất để làm điều này?

Trả lời

0

Lucene là một trong những tùy chọn khả dụng tốt nhất. Lucene hỗ trợ tìm kiếm chuỗi con để ubst sẽ trả về chất nền.

xem http://wiki.apache.org/lucene-java/LuceneImplementations để triển khai ngôn ngữ phù hợp.

+0

Cảm ơn, nhưng có vẻ như Lucene không có chỉ số về điều đó. –

3

Cấu trúc chỉ mục tốt nhất cho trường hợp này là suffix tree Lucene không triển khai loại chỉ mục này để tìm kiếm chuỗi con của nó chậm. Nhưng lucene có chỉ số cây tiền tố có nghĩa là bạn có thể thực hiện tìm kiếm nhanh nếu bạn tìm kiếm các cụm từ theo tiền tố của chúng.

+0

Cảm ơn. Tôi đã tự xây dựng một mảng hậu tố. –

0

Sphinx không hỗ trợ tìm kiếm chuỗi con hiệu quả kể từ Phiên bản 2.0.1 beta, 22 tháng 4 năm 2011. Thật không may kể từ hôm nay, hỗ trợ này chỉ liên quan đến các phiên bản beta, như đã đề cập here.

Tôi đã thử phiên bản beta 2.1.1. Dường như nó hoạt động chính xác. Xem manual entry cho loại từ điển, đọc khoảng keywords loại.

Khi tôi cố gắng sử dụng 2.0.6 phiên bản phát hành, nó đã giảm trở lại chỉ số crc không hiệu quả, đưa ra các cảnh báo sau khi lập chỉ mục:

WARNING: min_infix_len is not supported yet with dict=keywords; using dict=crc 

tối thiểu tập tin cấu hình của tôi:

source sour 
{ 
    type = xmlpipe2 
    xmlpipe_command = type C:\Temp\1\sphinx\input.xml 
} 

index inde 
{ 
    source = sour 
    path = testpa 
    enable_star = 1 
    dict = keywords 
    charset_type = utf-8 
    min_infix_len = 1 
}