2009-11-18 15 views
8

Tôi đang sử dụng Lucene để lập chỉ mục và tìm kiếm một số lượng nhỏ tài liệu lớn. Sử dụng bản demo từ trang Lucene Tôi đã lập chỉ mục các tài liệu và có thể tìm kiếm chúng. Tuy nhiên, kết quả tìm kiếm không đặc biệt hữu ích vì nó trỏ đến tệp của tài liệu. Với các tài liệu rất lớn, điều này không thực sự hữu ích.Lucene có thể trả lại một số kết quả tìm kiếm từ một tệp được lập chỉ mục duy nhất không?

Tôi tự hỏi liệu Lucene có thể lập chỉ mục các tài liệu rất lớn này và tạo ra một sự trừu tượng hóa trên chúng cung cấp nhiều kết quả chi tiết hơn.

Ví dụ có thể giải thích rõ hơn ý của tôi là gì. Xem xét một cuốn sách rất lớn, chẳng hạn như Kinh Thánh. Một tập tin chứa toàn bộ văn bản của Kinh Thánh, vì vậy với bản demo, kết quả của việc tìm kiếm câu nói, 'Damascus' sẽ trỏ đến tập tin. Những gì tôi muốn làm là giữ lại tài liệu lớn, nhưng tìm kiếm sẽ trả về kết quả trỏ đến một cuốn sách, chương hoặc thậm chí chính xác như một câu. Vì vậy, một tìm kiếm cho 'Damascus' có thể trở lại (trong số những người khác) Book 23, Chương 7, Verse 8.

Có thể (và thực hành tốt nhất trong sử dụng Lucene) hay thay vào đó tôi cố gắng chia nhỏ tài liệu lớn nhiều tệp nhỏ để lập chỉ mục?

Nếu có bất kỳ sự khác biệt nào, tôi đang sử dụng Java Lucene 2.9.0 và đang lập chỉ mục các tệp HTML có dung lượng khoảng 1MB - 4MB. Trong đó về kích thước tập tin là không lớn, nhưng nó là lớn, liên quan đến một người đọc nó.


Tôi không nghĩ tôi đã giải thích điều này hết mức có thể. Ở đây đi cho một ví dụ khác.

Giả sử tôi lấy tệp HTML lớn của mình và (vì lợi ích đối số) cụm từ tìm kiếm 'Damascus' xuất hiện 3 lần. Một lần trên dòng 100 trong một thẻ <div>, trên dòng 2000 trong một thẻ <p> và trên dòng 5000 trong một thẻ <h1>. Có thể lập chỉ mục với Lucene, sao cho sẽ có 3 kết quả, và họ có thể trỏ đến yếu tố cụ thể mà thuật ngữ đó ở trong đó không?

Tôi không nghĩ rằng mình muốn cung cấp kết quả tài liệu khác cho cụm từ đó. Vì vậy, nếu thuật ngữ 'Damascus' xuất hiện hai lần trong một số <div> cụ thể, thì sẽ chỉ có một kết quả phù hợp.

Nó xuất hiện từ nhận xét từ Kragen rằng những gì tôi muốn làm là phân tích cú pháp HTML khi Lucene đang trải qua giai đoạn lập chỉ mục. Sau đó, tôi có thể quyết định đoạn tôi muốn xem xét như một tài liệu từ những gì được đọc bởi trình phân tích cú pháp. Vì vậy, nếu tôi thấy một div với một lớp nhất định tôi có thể bắt đầu một tài liệu Lucene mới và nó sẽ được trả về như là một hit riêng biệt khi một từ trong nội dung div được tìm kiếm.

Điều này có vẻ giống như những gì tôi muốn làm không?

Trả lời

1

Có - Lucene ghi lại độ lệch của các cụm từ phù hợp trong tệp, để có thể sử dụng để tìm ra vị trí trong nội dung được lập chỉ mục mà bạn cần tìm kiếm kết quả phù hợp.

Có một tiện ích bổ sung Lucene.Highlight thực hiện nhiệm vụ chính xác này cho bạn - hãy thử this article, cũng có một số câu hỏi về StackOverflow liên quan đến đánh dấu nhấn (nhiều trong số này được tùy chỉnh để sử dụng với các ứng dụng web và làm những việc như xung quanh lời phù hợp với <b> tags)

UPDATE: Tùy thuộc vào cách bạn tìm kiếm index của bạn, bạn cũng có thể thấy rằng một ý tưởng tốt đẹp của nó để chia văn bản lớn thành nhiều phần nhỏ hơn (ví dụ chương) cũng - tuy nhiên, đây là câu hỏi về cách bạn muốn sắp xếp, ưu tiên và trình bày kết quả của mình cho người dùng cuối.

Ví dụ: giả sử người dùng thực hiện tìm kiếm "foo" và có 2 sách chứa cụm từ đó. Cuốn sách đầu tiên (sách A) có thể chứa 2 chương, mỗi chương có nhiều tham chiếu đến "foo", tuy nhiên thuật ngữ này hầu như không được đề cập trong phần còn lại của cuốn sách, tuy nhiên cuốn sách thứ hai (sách B) chứa nhiều tham chiếu đến "foo" , tuy nhiên chúng nằm rải rác quanh toàn bộ cuốn sách. Nếu bạn lập chỉ mục theo sách, có thể bạn sẽ thấy cuốn B là lần truy cập đầu tiên, tuy nhiên, bạn có thể thấy rằng 2 chương từ sách A là 2 lượt truy cập đầu tiên, tiếp theo là các chương từ sách B.

Cuối cùng, rõ ràng người dùng sẽ được hiển thị 1 lần truy cập cho mỗi tài liệu phù hợp mà bạn có trong chỉ mục của mình - nếu bạn muốn giới thiệu cho người dùng của mình danh sách sách phù hợp. trình bày cho người dùng một danh sách các chương phù hợp trong đó trường hợp rõ ràng được lập chỉ mục theo chương.

+0

Sử dụng ví dụ của bạn, tôi có thể giữ sách B là một tệp đơn, trong trường hợp của tôi là tệp HTML và tạo một vài Tài liệu Lucene từ bên trong một tệp đó sao cho tất cả kết quả từ một tệp có thể được báo cáo cho người dùng lượt truy cập? Có thể lập chỉ mục theo chương khi các chương nằm trong cùng một tệp * không? Cảm ơn câu trả lời của bạn :) – Grundlefleck

+0

Bạn có thể lập chỉ mục theo chương bằng cách chỉ cho Lucene một tập con của tệp đó khi bạn lập chỉ mục - điều này sẽ cho bạn 1 lần truy cập cho mỗi chương phù hợp. Nếu bạn muốn trình bày cho người dùng một lần truy cập cho mỗi trận đấu rời rạc thì bạn sẽ phải trải qua và tìm tất cả các lần xuất hiện cho mỗi tài liệu phù hợp - không có cách nào để chia sách thành đủ tài liệu Lucene sao cho mỗi lần truy cập được đảm bảo tương ứng với chính xác 1 lần xuất hiện của từ/cụm từ đó. – Justin

0

Một cách để thực hiện việc này là tạo một số tài liệu ra khỏi một cuốn sách. Các tài liệu có thể đại diện cho sách, chương hoặc câu. Vì văn bản không cần phải là duy nhất, đây là những gì tôi sẽ làm. Bằng cách này, câu đầu tiên trong chương đầu tiên trong sách Sáng thế ký sẽ được lập chỉ mục bốn lần: trong toàn bộ kinh thánh, trong sách Sáng thế ký, trong chương đầu tiên và là câu.

Sự tinh tế ở đây là mục tiêu chính xác của việc truy xuất: Bạn có muốn chỉ hiển thị từ khóa tìm kiếm trong ngữ cảnh cho người dùng không? Trong trường hợp này, hãy cân nhắc sử dụng Lucene highlighter. Nếu bạn cần truy xuất để được sử dụng thêm (tức là lấy con trỏ được truy xuất đến một chương hoặc một câu và thực hiện một số xử lý ở vị trí này trong văn bản), tôi sẽ đi với các tài liệu chi tiết hơn như tôi đã mô tả trước đây.

+0

Mục tiêu là cung cấp hiển thị HTML trong ứng dụng Swing, kết quả tìm kiếm sẽ cho phép người dùng điều hướng đến phần đó của HTML. Tìm kiếm cũng có thể cung cấp bản xem trước. Chỉ cần rõ ràng, khi bạn nói 'tạo một số tài liệu trong một cuốn sách', bạn có nghĩa là tài liệu Lucene hay các tệp mới? – Grundlefleck

+0

Tôi có nghĩa là tài liệu Lucene. –

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