2010-10-12 25 views
5

Tôi mới sử dụng Lucene, tôi bắt đầu học phiên bản 3 và có một điều tôi không hiểu (rõ ràng là vì tôi không có kinh nghiệm về chủ đề này).Danh sách "mã thông báo" trên Lucene 3

Trong Lucene 2.9, nếu tôi muốn có danh sách mã thông báo, tôi sẽ tạo một ArrayList của lớp Token, ArrayList chẳng hạn. Điều đó khá trực quan đối với tôi và khái niệm về mã thông báo rất rõ ràng.

Hiện tại, việc sử dụng lớp Token bị từ chối vì lợi ích của API dựa trên thuộc tính, tôi có phải tạo lớp của riêng mình để đóng gói các thuộc tính tôi muốn không? Nếu có, không phải là gần như tái tạo lớp Token của Lucene sao?

Tôi đang làm một lớp để kiểm tra các trình phân tích và có danh sách các mã thông báo kết quả giúp dễ dàng kiểm tra hơn, tôi đoán vậy.

Bất kỳ trợ giúp nào sẽ được đánh giá cao;) Cảm ơn bạn!

Trả lời

2

Theo số Token Javadoc, "Mặc dù không cần thiết y sử dụng Mã thông báo nữa, với API TokenStream mới, nó có thể được sử dụng làm lớp tiện lợi triển khai tất cả Thuộc tính, đặc biệt hữu ích để dễ dàng chuyển từ cũ sang API TokenStream mới. "

Tôi khuyên bạn nên tiếp tục sử dụng Mã thông báo. Nó khớp với mô tả ở trên.

+0

Cảm ơn, tôi đã hiểu nhầm các ghi chú về lớp Token;) – Fabio

2

Sử dụng các lớp TermAttribute:

TokenStream stream = analyzer.tokenStream("field", "text"); 
TermAttribute termAttr = stream.getAttribute(TermAttribute.class); 
while (stream.incrementToken()) { 
    String token = termAttr.term(); 
} 
+0

Cảm ơn anwsering, nhưng nó không trả lời câu hỏi của tôi.Tôi biết làm thế nào để có được các thuộc tính từ một tokenstream, trong mã bạn chỉ nhận được termattribute, vì vậy bạn có thể lưu mỗi thuật ngữ trên một chuỗi [] và có danh sách các thẻ. Nhưng trong trường hợp bạn cũng muốn có một offsetattribute, thì bạn có 2 thuộc tính và không thể lưu chúng trên một chuỗi [], và câu hỏi của tôi liên quan đến điều đó .. lớp Token đóng gói các thuộc tính khác nhau trong cùng một cấu trúc và tôi cần cho đến bây giờ nếu trong Lucene 3, vì chúng không khuyến khích sử dụng Mã thông báo, giải pháp được đề nghị để đóng gói các thuộc tính khác nhau trong cùng một cấu trúc là gì? – Fabio

+0

Rõ ràng là không có bất kỳ, ít nhất không phải là tôi biết. Tôi cũng ngạc nhiên bởi quyết định này. Các nhà phát triển Lucene dường như ủng hộ tối ưu hóa thiết kế API phù hợp. –

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